Tabnabbing & Reverse Tabnabbing
Het leuke van werken in de ICT / Cybersecurity is dat je op dagelijkse basis bijleert. Vaak gaan we uit van de dingen die we weten en kennen. Maar het is veel leuker om nieuwe dingen te ontdekken. Recentelijk las ik ergens iets over een zogenaamde “reverse tabnabbing attack”. Dat was interessant. Wat het nog interessanter was dat ik ook de “gewone” tabnabbing attack niet kende. Reden temeer om uit te vogelen hoe dit werkt en hier te delen op mijn blog!
Tabnabbing, het klinkt een beetje als “knabbelen” of het uitvoeren van een coole gitaar riff. Maar niets is minder waar. Tabnabbing is een web-based phishing attack waarbij gebruikers overgehaald worden om hun credentials achter te laten op een website die ze vertrouwen. Dit is uiteraard geen nieuwe aanval en zien we vaak terug bij man-in-the-middle attacks. Tabnabbing werkt echter toch weer net iets anders. De naam “Tabnabbing” stamt uit 2010 en is bedacht door Aza Raskin. Tabnabbing is een logische naam als je weet dat de aanval misbruik maakt van je reeds geopende browser tabs. Vertrouw jij de sites die open staan in je reeds geopende tabbladen? Ja toch? Dit zijn sites welke we bewust geopend hebben en eventueel dubbel op hun veiligheid gecontroleerd hebben. Geen reden om de open pagina’s niet te vertrouwen toch? O…. jawel!
Laten we eerst eens kijken wat “tabnabbing” precies is. Tabnabbing geschied op een geopende pagina welke in eerste instantie actief bezocht wordt en na een tijdje idle wordt. Tijdens de “idle” tijd veranderd de pagina in een malafide pagina. Bijvoorbeeld:
- Ik klik op een link in een forum welke mij interessant lijkt.
- Ik lees de content op deze pagina, laat de tab open staan en navigeer terug naar het forum of een andere tab. De zojuist geopende tab wordt nu inactief.
- Bij inactiviteit draait er een script en veranderd de pagina naar een fake pagina, b.v. een Gmail login pagina.
- Na een tijdje komt de gebruiker weer op de tab en ziet dat hij opnieuw moet inloggen op zijn Gmail. De gebruiker controleert nu minder makkelijk de veiligheid van deze tab want hij stond immers al open.
- De inloggegevens worden nu plain-text doorgestuurd naar de aanvaller.
Tabnabbing is ontzettend gevaarlijk omdat de gebruiker de reeds geopende tabs vertrouwd. De manier waarop tabnabbing werkt middels het “windows” object welke d.m.v. Java gecontroleerd kan worden. Een normale HTML link kan er als volgt uitzien:
<a href="https://voorbeeldje.nl/blog" target="_blank" rel="noopener noreferrer">Blog</a> |
Stel je voor dat op deze pagina (of via de e-mail) een link aangeboden wordt. Dit lijkt op een legitieme link. De gebruiker leest de content op de pagina en gaat weer terug naar een andere tab. Echter is op deze pagina een script actief dat lijkt op het volgende script:
Bron van onderstaande code:
https://github.com/beefproject/beef/tree/master/modules/social_engineering/tabnabbinghttps://github.com/beefproject/beef/tree/master/modules/social_engineering/tabnabbing
beef.execute(function() { var url = "<%= @url %>"; var wait = <%= @wait %>*1000*60; var tabnab_timer; beef.net.send('<%= @command_url %>', <%= @command_id %>, 'tabnab=waiting for tab to become inactive'); // begin countdown when the tab loses focus $j(window).blur(function(e) { begin_countdown(); // stop countdown if the tab regains focus }).focus(function(e) { clearTimeout(tabnab_timer); }); begin_countdown = function() { tabnab_timer = setTimeout(function() { beef.net.send('<%= @command_url %>', <%= @command_id %>, 'tabnab=redirected'); window.location = url; }, wait); } }); |
Wanneer de focus op de verloren gaat start er een timer. Nadat de timer is verstreken wordt de tab veranderd naar de opgegeven URL, bijvoorbeeld “gmail.com”.
Er zijn vele browsers plugins, scripts en oplossingen om jezelf te beschermen tegen tabnabbing. Aan te raden zijn de “NoScript” en “NoTabNab” browser plugins en uiteraard eigen oplettendheid! Controleer altijd de veiligheid van de pagina alvorens je je gegevens invoert.
Tabnabbing kent echter nog een gevaarlijker broertje, en dat is “Reverse Tabnabbing”. Ook reverse tabnabbing gaat op een vergelijkbare manier te werk maar maakt het mogelijk om de bronpagina te overschrijven door een malafide pagina. Het proces is dan iets anders en verloopt als volgt:
- Ik klik op een vanuit mijn gmail.com client welke mij interessant lijkt.
- Deze link wordt geopend in een nieuw tabblad en bevat de informatie die ik wil lezen (of niet).
- De zojuist geopende pagina bevat een code welke mijn bronpagina overschrijft voor een malafide gmail.com pagina.
- Wanneer ik klaar ben met lezen keer ik terug naar mijn gmail.com tab en zie ik dat ik opnieuw moet inloggen.
- Zonder al te veel na te denken vul ik mijn gegevens in die nu niet middels een POST naar gmail.com gestuurd worden maar via een GET naar de hacker gestuurd worden.
Deze aanval is nog gevaarlijker omdat de hacker hier meer controle heeft over de pagina die “gekloond” wordt om te misbruiken. Als ik namelijk een link op forum abc.nl post, dan zorgt de hacker er uiteraard voor dat abc.nl overschreven wordt door een malafide versie van abc.nl. Daarnaast is er voor deze aanval geen idle tijd nodig want het overschrijven van de bronpagina gebeurt meteen als de doelpagina geopend wordt (in de nieuwe tab). En uiteraard wordt nog steeds misbruik gemaakt van het vertrouwen dat mensen hebben in reeds openstaande tabbladen.
Normaliter heeft een doelpagina geen enkele controle over de bronpagina. Deze mag feitelijk niet eens gelezen worden. Om ervoor te zorgen dat de doelpagina helemaal geen informatie over de bronpagina ontvangt is het aan te raden om de volgende code mee te geven aan je URL’s:
rel=”noopener noreferrer” |
Maar zelfs als deze code meegegeven wordt dan kan Javascript deze wel overschijven met een simpel scriptje. Bijvoorbeeld:
<script> if (window.opener) { window.opener.location = "http://phishing.nl"; } </script> |
Reverse Tabnabbing werkt alleen in zogenaamde “Multi-Threaded Browsers” waarbij elke tab een threat is het browser proces en ook het geheugen deeld met de andere tabbladen.
De impact bij een “Multiprocessing” browser zou hierbij nihil zijn omdat hierbij elke instance in een eigen “omgeving” draait. Vrijwel elke browser is echter een multithreading browser omdat dit de gebruikerservaring aanzienlijk ten goede komt. Vaak moeten tabbladen namelijk wel samen kunnen communiceren en dat zou binnen een multiprocessing browser problematisch zijn.
Reverse Tabnabbing is gedeeltelijk te beveiligen door aan elke “_blank” HTML tag (URL in nieuw venster) de “rel=”noopener noreferrer” tag toe te voegen. Deze kun je middels JavaScript ook automatisch aan elke “_blank” tag laten toevoegen:
function openPopup(url, name, options){ // Open the popup and set the opener and referrer policy instruction var newWin = window.open(null, name, 'noopener,noreferrer,' + options); // Reset the opener link newWin.opener = null; // Now load the correct url newWin.location = url; } |
Een andere oplossing is het automatisch toe laten voegen van een HTTP Header aan al het browse verkeer:
Referrer-Policy: no-referrer |
Mocht bovenstaande de indruk wekken dat reverse tabnabbing alleen mogelijk is bij HTML URL tags en niet bij JavaScript based tags… you’re wrong. Ook Java-based URL’s zoals onderstaande voorbeeld geven dezelfde informatie mee over de bronpagina en dus is reverse tabnabbing ook mogelijk met JavaScript based URL’s.
<button onclick="window.open('http://phishing.nl')"> |
Een makkelijke manier om een tabnabbing aanval uit te voeren is door gebruik te maken van de Social Engineering Toolkit (SET). De Social Engineering Toolkit bevat de juiste tools om sites te clonen en gekloonde sites te voorzien van een tabnabbing aanval.
Uiteraard kun je ook andere technieken gebruiken. Het gevaar is niet alleen dat TabNabbing een gevaarlijke phishing techniek is maar dat hij ook redelijk gemakkelijk is om te gebruiken. Om reverse tabnabbing tegen te gaan kun je dezelfde mechanieken toepassen die ook bescherming bieden tegen “normale” tabnabbing. Daarnaast blijft de mens bij phishing de zwakste schakel. Goede gebruikersvoorlichting is dus absoluut een vereiste!
★ (Reverse) Tabnabbing is niet nieuw maar is wel een aanval die nog steeds misbruikt wordt en waar gebruikers extra goed op getraind moeten worden. Hopelijk heb ik je met deze post iets meer inzicht kunnen geven in het fenomeen “tabnabbing” en “reverse tabnabbing”. Wat het is, wat de verschillen zijn en met name waarom dit een zeer gevaarlijk aanval kan zijn. ★
Vond je deze post interessant… dan zou ik het ontzettend tof vinden als je deze post zou willen liken of willen re-posten op social media of eigen website!! Alvast ontzettend bedankt!! ♔