https://lynt.cz @smitka
Vláďa Smitka
vladimir.smitka@lynt.cz
@smitka
Lynt services s.r.o.
03.11.2018 1
Co ukázal globální scan
přístupných .git adresářů?
https://lynt.cz @smitka03.11.2018 2
Otevřená data (anglicky Open data) jsou informace a
data zveřejněná na internetu, která jsou úplná, snadno
dostupná, strojově čitelná, používající standardy s volně
dostupnou specifikací, zpřístupněná za jasně
definovaných podmínek užití dat s minimem omezení a
dostupná uživatelům při vynaložení minima možných
nákladů.
-- wikipedia
https://lynt.cz @smitka03.11.2018 3
https://lynt.cz @smitka03.11.2018 4
https://lynt.cz @smitka
Starší výzkumy a články
• Stav WordPress instalací v ČR
– https://lynt.cz/blog/wordpress-v-cz-velky-pruzkum
• Průzkum WordPress na Slovensku
– https://lynt.cz/blog/wordpress-v-sk-pruzkum
• Technické zpracování webů prezidentských kandidátů
– https://lynt.cz/blog/prezident-2018
• Nejčastější problémy moderních webů
– https://lynt.cz/blog/10-nejcastejsich-problemu-
modernich-webu
03.11.2018 5
https://lynt.cz @smitka
Otevřené .git repozitáře
• /.git/ => rekonstrukce zdrojového kódu
• Přehlédnutí kvůli 403
• /.git/HEAD
• /.git/config
• /.git/index
• /.git/logs/HEAD
• https://lynt.cz/blog/globalni-scan-otevrenych-git-
repozitaru
03.11.2018 6
https://lynt.cz @smitka03.11.2018 7
https://lynt.cz @smitka03.11.2018 8
https://lynt.cz @smitka03.11.2018 9
https://lynt.cz @smitka
"V repozitáři přeci nikdo nemá citlivá
data"
03.11.2018 10
https://lynt.cz @smitka
Skutečnost?
• Hesla k DB
• API klíče
• Hesla k SMTP
03.11.2018 11
https://lynt.cz @smitka03.11.2018 12
https://lynt.cz @smitka
Další zajímavosti
• Zálohy
• Dočasné soubory
• Dumpy DB
• Inicializační DB
• Zálohovací skripty
• Obslužné skripty
• .idea
03.11.2018 13
https://lynt.cz @smitka03.11.2018 14
/.idea/webServers.xml
https://lynt.cz @smitka
Endpointy
03.11.2018 15
• File managery
• Rozesílače e-mailů
• Skrytá "API"
• Adminer
• Chyby v kódech a knihovnách
https://lynt.cz @smitka
Novinka?
• https://en.internetwache.org/dont-publicly-
expose-git-or-how-we-downloaded-your-
websites-sourcecode-an-analysis-of-alexas-
1m-28-07-2015/
• https://news.ycombinator.com/item?id=8389
81 (2009)
03.11.2018 16
https://lynt.cz @smitka
Scan - kde vzít cíle?
• IP rozsah
– Jej jich docela hodně (necelé 4 miliardy)
– Mnoho sdílených serverů
– Hodně Honeypotů
• Seznam domén
– Reálnější cíle
03.11.2018 17
https://lynt.cz @smitka
Kde vzít seznam domén?
• SK - https://sk-nic.sk/subory/domains.txt
• CZ - neveřejné, https://github.com/spaze/domains
• Globál
– Alexa Top 1M
• http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
• Dobré pro statistické výzkumy, málo pro změnu.
– Rapid 7 OpenData
• https://opendata.rapid7.com/
– Certificate Transparency - CTL
• https://medium.com/cali-dog-security/parsing-certificate-
transparency-lists-like-a-boss-981716dc506
– Censys.io
• https://censys.io/
03.11.2018 18
https://lynt.cz @smitka
Rapid 7 - OpenData
• FDNS Log - 150 GB JSON
• 1 500 000 000 záznamů + vlastní zdroje
• Redukce
– Pouze A/CNAME
– Domény 2. řádu
– Subset TLD (.com, .eu, .cz,…)
– Přeskakovat free domény (.tk, .ml, .ga, .cf, .gq)
– Odstranit "strojová jména" (ip-8-8-8-8.net)
– Tip: Pouze domény s existujícím MX
03.11.2018 19
https://lynt.cz @smitka
Rozložení domén v původním datasetu
142 841 000 com 1 025 000 it
14 958 000 net 999 000 top
11 674 000 org 989 000 ch
9 067 000 de 964 000 cf
6 044 000 info 806 000 club
4 060 000 ru 803 000 ga
2 209 000 biz 797 000 cn
1 867 000 nl 713 000 online
1 770 000 us 651 000 gq
1 487 000 loan 640 000 pl
1 442 000 tk 635 000 ml
1 384 000 fr 630 000 cz
1 315 000 xyz 603 000 es
1 182 000 eu 572 000 be
1 032 000 ca 489 000 se
03.11.2018 20
https://lynt.cz @smitka
230 000 000 domén
03.11.2018 21
https://lynt.cz @smitka
Jak to probíhalo?
• Test technologií - python + asyncio/aiohttp
• 4 týdny
• Maximum 18 malých VPS + 4 fyzické stroje
• 300$
• Přes 100 abuse (stížností), nejvíce z Jižní Korei
• To se příliš nelíbilo poskytovatelům VPS
03.11.2018 22
https://lynt.cz @smitka03.11.2018 23
https://lynt.cz @smitka
390 000 webů
s přístupným .git adresářem
03.11.2018 24
https://lynt.cz @smitka
/.git/logs/HEAD
• E-maily přímo na vývojáře
• 30% repozitářů neobsahuje nic co vypadá jako
validní mail
03.11.2018 25
https://lynt.cz @smitka
Security.txt
03.11.2018 26
https://securitytxt.org/
snadné nalezení kontaktu pro hlášení bezpečnostních problémů
Pouze na 8 webech…
https://lynt.cz @smitka
Oslovování
• 100 000 e-mailů
• Jak je poslat?
– Bounce rate 10-30% => nelíbí se provozovatelům
– Vlastní SMTP s podporou TLS, DKIM
03.11.2018 27
https://lynt.cz @smitka03.11.2018 28
https://lynt.cz @smitka
Vývojáři jsou rádi,
když je někdo na chybu upozorní
03.11.2018 29
https://lynt.cz @smitka03.11.2018 30
https://lynt.cz @smitka03.11.2018 31
https://lynt.cz @smitka03.11.2018 32
https://lynt.cz @smitka03.11.2018 33
/fabfile.py => 403
/fabfile.pyc => 200
https://lynt.cz @smitka
Redukce false positive ve 2. várce
• Test nastavení remote origin na github
• Prověření indexu, zda obsahuje dynamické
soubory
03.11.2018 34
https://lynt.cz @smitka
😠 jednotky negativních reakcí
✋ několik desítek false positive notifikací
🗨🗨 > 100 pozitivních komentářů
❤️ > 3000 děkovných mailů z celého světa
03.11.2018 35
https://lynt.cz @smitka
150 000 webů
opraveno 2 měsíce od scanu
03.11.2018 36
👍
👎 240 000 zbývá…
https://lynt.cz @smitka03.11.2018 37
https://lynt.cz @smitka03.11.2018 38
https://lynt.cz @smitka03.11.2018 39
https://lynt.cz @smitka03.11.2018 40
https://lynt.cz @smitka
Jaktože je tolik Python a Ruby?
• U většiny postižených webů šlo stáhnout
všechny soubory (.py, .rb)!!!
• Včetně souborů mimo repozitář
03.11.2018 41
https://lynt.cz @smitka
Špatně nakonfigurovaný websererver
# Serve static files and redirect any other request to Gunicorn
server {
listen 80;
server_name domain.com;
root /var/www/domain.com/;
# Check if a file exists at /var/www/domain/ for the incoming request.
# If it doesn't proxy to Gunicorn/Django.
try_files $uri @django;
# Setup named location for Django requests and handle proxy details
location @django {
proxy_pass http://django;
proxy_redirect off;
proxy_set_header Host $host;
}
}
03.11.2018 42
https://django-best-practices.readthedocs.io/en/latest/deployment/servers.html
https://lynt.cz @smitka
Další problematické konfigurace
if (!-f $request_filename) {
proxy_pass @app;
break;
}
* https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#check-if-file-exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://app/$1 [P]
03.11.2018 43
https://lynt.cz @smitka
Desítky tisíc webů má server
nakonfigurovaný pro vracení všech
existujících souborů!
03.11.2018 44
Co s tím uděláme?
https://lynt.cz @smitka
Díky za pozornost!
03.11.2018 45
Sledujte můj twitter @smitka.
Koukněte na mé starší prezentace na SlideShare.
Feedback: http://a.openalt.cz/3
Náměty na další výzkumy:
https://en.internetwache.org/scanning-the-alexa-top-1m-for-ds-store-files-12-03-2018/
https://infosec.rm-it.de/2018/08/19/scanning-the-alexa-top-1m-sites-for-dockerfiles/

Co ukázal globální scan přístupných .git repozitářů?