Těžba v prohlížečích
Vznikly webové stránky,
které distribuují těžařské javaskripty a zprostředkovávají ukládání vytěžených
prostředků do kryptoměnových peněženek. Tyto skripty jsou pak s různými
motivacemi a způsoby vkládány do webových stránek. Vytěžená kryptoměna se
neukládá do peněženky člověka, co kryptoměnu vytěžil, ale toho, co těžarský
skript do stránek vložil.
Což může být majitel stránek, aby tímto způsobem sponzoroval provoz namísto zobrazovaní reklamy. Ale daleko častěji je to útočník, který tyto stránky zneužívá bez vědomí majitele. Tento způsob černé těžby je totiž mnohem méně nápadný než instalace těžařského červa na počítač, a je zcela platformově nezávislý. Funguje na mobilu, tabletu i na PC. A dále ho lze maskovat otevíráním minimalizovaných oken nebo tabů na pozadí.
Co s tím?
Způsob jak znemožnit těžbu
kryptoměn ve webových prohlížečích uživatelů, je rozbít propojení webové stránky
a těžařského serveru. Regulérní webová stránka načte svůj obsah a jako její
součást se stáhnou z adres těžařského serveru i těžařské skripty. Pokud ale
zabráníme browseru, aby tyto těžařské části stahoval, stránka se zobrazí bez
poškození a k těžbě nedojde.
Jako ochrana vzniklo rozšíření NoCoin, později převedené na filtr do Adblocku se stejným jménem (stránky filtru NoCoin). Tento filtr pracuje na principu filtrace URI. Zablokované URI si browser, při načítání stránky, vůbec nevyžádá. Adblock NoCoin jako způsob ochrany ovšem nelze použít u všech prohlížečů či uživatelů, někteří uživatelé instalaci nezvládnou.
Napadlo mě tedy udělat něco univerzálnějšího než je instalace filtru. Inspiroval jsem se službou, kterou poskytuje CESNET na blokování nepovolených hazardních webů (článek o této službě na Root.cz), spojil ji s filtrem NoCoin a vznikl RPZ filtr pro rekurzivní DNS resolver. Když už ten filtr máme, proč ho neposkytnout všem? Spustil jsem, za pomoci Univerzity Pardubice a fondu rozvoje CESNET, filtr jako veřejně dostupnou službu.
Použití filtru v DNS
resolveru Bind
Pokud používáte jako rekurzivní resolver Bind, je konfigurace
velmi snadná. Do konfigurace named.conf přidejte zónu filtru a tu přidejte do
RPZ pravidel:
options {
...
response-policy {
zone "nocoin.upce.cz";
};
};
zone
"nocoin.upce.cz" {
type slave;
masters { 2001:718:603:e195:113:124:0:29;
195.113.124.29; };
file "nocoin.upce.cz";
};
Filtrované domény jsou pak
resolverem hlášeny jako neexistující a v logu resolveru uvidíte podobné záznamy:
2020-01-29 06:49:37 named[553]: client @0x7f4f778791f0 10.0.0.1#30232
(smartoffer.site): rpz QNAME NXDOMAIN rewrite smartoffer.site via
smartoffer.site.nocoin.upce.cz
Obsah filtru si můžete prohlédnout příkazem:
# dig @dns-nocoin.upce.cz axfr nocoin.upce.cz
Jak moc je těžba rozšířená?
Univerzita Pardubice patří k menším univerzitám, s průměrným počtem 1000 klientů
připojených k wifi síti eduroam. Když jsem filtr nasazoval, nepočítal jsem s
velkými hodnotami blokací, ale výsledky mě docela ohromily.
Graf blokací
Počty blokací kopírují počty připojených klientů k síti. Jasně je vidět začátek akademického roku (40. týden), přednáškové období, zkouškové období (47. týden), vánoční prázdniny atd. Z grafu je dobře patrné, že těžba kryptoměn ve webových prohlížečích je velmi rozšířená a má cenu se jejím řešením zabývat.
Při analýze blokací se mi potvrdilo, že těžba kryptoměn nerozlišuje mezi mobilními zařízením a PC, snaží se těžit na všem. Nepodařilo se mi bohužel najít zařízení infikované těžařským malware, abych zjistil zda tato ochrana nefunguje také proti newebové těžbě.
Je blokace etická?
No a
dostáváme se k závěrečné otázce a podnětem pro velké debaty. Je to filozofická
otázka s nejasným závěrem. Je to trochu jako s ohněm, který je dobrým sluhou,
ale špatným pánem. Uvedu výčet myšlenek do debaty:
samotné prohlížeče blokují podvodné stránky
prohlížeče obsahují blokátory jak
reklam, tak těžby kryptoměn
je to náhrada za reklamu (četl jsem o jednom
webu, který tak za dva měsíce provozu vydělal asi 11 Kč)
ušetří to více
energie, než když někdo zapomene přes noc zhasnout na WC?
proč šetřit hw
uživatelů?
zase nějaké omezování proti svobodě internetu
RPZ v DNS je
varianta firewallu
Ochrana proti těžbě
kryptoměn pomocí v DNS: vlastní RPZ filtr
Dnes se podíváme na realizaci vlastního RPZ nocoin filtru, pokud se vám nelíbí
jeho stahování z veřejného zdroje. Zároveň to můžete brát jako inspiraci pro
vlastní pravidla. Sám jsem musel podobný filtr přidat, když manželce začal padat
prohlížeč, protože weby pro široké masy asi „vylepšily“ svůj kód o nějaké další
reklamní a sledovací skripty a prohlížeč to už nezvládal. Blokací se také
dramaticky zvýšila rychlost načítání těchto stránek, ale to jsem odbočil.
Získávání dat z filtru NoCoin
Při provozu vlastního filtru potřebujete
získávat informace, že vystavený filtr NoCoinu byl aktualizován. Nemám rád, když
si každá služba, co na serveru běží, posílá vlastní notifikační maily. Raději
mám notifikování a monitoring centrální službou, u nás používáme NagiosXI. Proto
jsem vytvořil skript, který je volán přes NRPE, Nagiosem. Skript stáhne aktuální
verzi souboru filtru, porovná ji s lokální verzí a podle výsledku notifikuje.
Je samozřejmě možné použít i jiný dohledový systém, který NRPE podporuje. Jen musíte správně nastavit čas a periodu spouštění skriptu, stačí na 1× denně. Notifikaci nastavíme už na první výskyt ne OK stavu.
Obsah skriptu check_nocoin_file.sh:
#!/bin/bash
#webova adresa na stazeni host tabulky
web_host_table="https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt"
#soubor s novymi daty
new_file="/var/cache/bind/nocoin_new.txt"
#soubor se starymi daty
old_file="/var/cache/bind/nocoin_old.txt"
##########################################################
wget -q -O
$new_file $web_host_table
diff -q $new_file $old_file > /dev/null 2>&1
if
[[ $? == 0 ]]
then echo "no new data"; exit 0
else echo "new data
available"; exit 1
fi
Povšimněte si, že NoCoin vydává filtr nejen ve
formátu pro Adblock ale také jako lokální host tabulku. A právě toho využijeme,
protože host tabulka se lépe parsuje a přetavuje do formy zónového souboru pro
Bind.
Sestavování zónového souboru
O parsování
staženého souboru, a sestavování zónového souboru, se stará ručně spouštěný
skript nocoin_bind.pl. Sestavování zóny jsem nechtěl automatizovat, aby byla
kontrola toho, co se ze zóny odebírá a co se do ní přidává. Při případné
kompromitaci souboru filtru na internetu nedojde k neštěstí. Po spuštění nám
skript ukáže rozdíly a ptá se nás, zda má pokračovat. Pro svou činnost skript
potřebuje Perlovské moduly DateTime a Text::Diff.
Ve skriptu je také implementována podpora whitelistu a blacklistu. Jsou to obyčejné textové soubory, kde na každém řádku je jedna doména. Doména na whitelistu nebude do filtru nikdy přidána a doména na blacklistu tam bude přidána vždy.
Sériové číslo generované zóny je založeno na klasickém datumovém systému a jako poslední dvojčíslí je použita hodina. Běžně soubor spouštíme jednou za dlouhou dobu, spuštění dvakrát během jedné hodiny neupraví správně sériové číslo a může způsobit chyby v propagaci aktualizace zóny v DNS.
Instalace vlastního filtru
v Bindu
Zónový soubor máme, stačí jej přidat do konfigurace Bindu, který nám
plní funkci rekurzivního resolveru.
options {
...
response-policy {
zone "rpz.cesnet.cz";
zone "phishing";
zone
"nocoin.upce.cz";
};
};
zone "nocoin.upce.cz"
{
file "/etc/bind/nocoin.conf";
type master;
};
Na rozdíl od
konfigurace, v předchozím článku, je toto zóna typu master a je v lokálním
souboru. Na ukázku zde uvádím více RPZ zón, které používáme. Je to blokace
nepovolených hazardních webů a obrana proti phishingu v mailech.
Filtrování phishingu
K phishingu udělám malou odbočku. Byli a občas ještě
jsme terčem mailových phishingových útoků. Uživatelé nám tak klikali na linky v
mailech a zadávali hesla do podvodných stránek. A některé podvodné stránky byly
opravdu zdařilé, včetně fotek našich skutečných stránek.
Pokud IT helpdesk zaznamená výskyt takových mailů, šup s doménou z odkazu do filtru. Uživateli se pak místo podvodné stránky zobrazí varování, že je na něj zkoušen podvod. Pokud byste měli zájem, mohu o této věci napsat také krátký článek.
Aktivace filtru
Ale zpátky k našemu
nocoinu. Bind máme nakonfigurovaný, zkontrolujeme, zda je zóna v pořádku a zda
ji bind vidí a pak můžeme nás nový filtr aktivovat reloadem Bindu:
root@dns-nocoin:~# named-checkconf -z
zone nocoin.upce.cz/IN: loaded serial
2020010207
root@dns-nocoin:~# rndc reload
Pokud již filtr běží a my ho jen
aktualizujeme, krok konfigurace Bindu samozřejmě vynecháme. Jen necháme zónový
soubor nově vygenerovat, zkontrolujeme zda jej bind vidí správně a reloadujeme.