Açık Kaynak Kodlu Yazılımları Kullanarak IDS/IPS Testleri-II

Bu yazıda, IDS/IPS sistemlerin kurallarını test etmek için geliştirilmiş pytbull test aracı konu edilmiştir. Ubuntu 64 bit işletim sistemi üzerinde,  IDS olarak Snort 2.9.4 kurulu ve registered olarak temin edilen tüm snort kuralları aktiftir. Snort kurulum ve yapılandırmasına bu yazıda değilmemişdir.


Bu yazıda anlatılan kurulum aşamaları Ubuntu 64 bit işletim sistemi üzerinde uygulanmıştır ve farklı işletim sistemlerinde kurulum teknikleri farklılık gösterebilir. Pytbull ile herhangi bir IDS/IPS sistemini (Checkpoint, Mcafee,Palo Alto,Snort, BroIDS vb.) test edebilirsiniz.



Yazıda geçen adımları uygularken, port/protokol sınırlaması ve içerik kontrolü olmayan/sansürsüz bir internet erişiminizin, kurulum yapacağınız işletim sistemlerinde root yetkinizin ve test için uygun ağ alt yapınızın olduğundan tekrar tekrar emin olunuz.

Yazı hakkındaki her türlü geri bildiriminiz için egitim@bga.com.tr adresine eposta gönderebilirsiniz. (lütfen çekinmeyin)
Ozan UÇAR

Pytbull Hakkında

IDS/IPS sistemlerin kurallarını tetikleyecek ve 11 test kategorisinde yaklaşık 300 farklı testi otomotik olarak yapabilmektedir.

Özellikleri

  1. badTraffic

RFC’ye uygun olmayan paketler üreterek, hedefin nasıl tepki verdiğini gözlemler.
  1. bruteForce

Hedefin çeşitli servislerine (FTP gibi) parola denemeleri gerçekleştirir.
  1. clientSideAttacks

Hedef sistemden reverse shell alarak zararlı dosyalar temin eder. İstemci tabanlı saldırıları canlandırmayı amaçlar.
  1. denialOfService

DOS saldırılarına karşı alınan koruma sistemlerini test eder.
  1. evasionTechniques

Çeşitli atlatma teknikleri ile IDS/IPS’in atlatılıp atlatılamadığını test eder.
  1. fragmentedPackets: Hedef sunucuya çeşitli parçalanmış paketler göndererek, koruma sistemini test eder.
  2. ipReputation

  3. normalUsage

Normal payloadlar üretir, ping gibi…
  1. pcapReplay

Pcap dosyalarını oynatır.
  1. shellCodes

Hedefin 21/ftp servisine çeşitli shellcode’lar göndererek IDS’in davranışlarını test eder.
  1. testRules

Temel test kurallarını içerir.

Çalışma Modları

Remote Mode

Bu çalışma şeklinde, ids ana switch’e bağlı mirror port’dan yada span port’dan promisc modda dinleme yaparak tüm trafiği elde etmektedir. Bu yazıda, Remote Mode test alt yapısı kullanılmıştır.


Local Mode

Yerel ağlar arasında kurguladığınız sistemler için çalıştıracağınız modlardır.

* *
IDS mode
IPS Mode

İstemci Tarafının Kurulum Aşamaları

Ön Gereksinimler

# apt-get install python python-scapy python-feedparser python-cherrypy3  gcc g++ build-essential libssl-dev libreadline-gplv2-dev zlib1g-dev linux-headers-generic libsqlite3-dev libxslt1-dev libxml2-dev libmysqlclient-dev libmysql++-dev nmap hping3 nikto tcpreplay apache2-utils build-essential checkinstall libssl-dev libssh-dev imagemagick libmagickwand-dev wkhtmltopdf



Ncrack Kurulumu
# wget http://nmap.org/ncrack/dist/ncrack-0.4ALPHA.tar.gz
# tar -xzf ncrack-0.4ALPHA.tar.gz
# cd ncrack-0.4ALPHA
# ./configure
# make &  make install



Nikto Kurulumu
# pwd (dizin adınızı verecektir, bu dizin adını not ediniz konfigurasyonda kullanacağız)
# wget http://www.cirt.net/nikto/nikto-2.1.5.tar.gz
# tar zxvf nikto-2.1.5.tar.gz
# ls nikto-2.1.5



Pytbull v2.0 Kurulumu

# cd pytbull



İstemci Konfigurasyon Dosyası



# pwd (pytbull’un kurulu olduğu dizine geçiniz)
# cat conf/config.cfg
[CLIENT]
ipaddr                  = 192.168.2.19
iface                   = eth0
useproxy                = 0
proxyhost               =
proxyport               =
proxyuser               =
proxypass               =



[PATHS]
db                      = data/pytbull.db
urlpdf                  = http://dl.dropbox.com/u/30211728/
pdfdir                  = pdf/malicious
pcapdir                 = pcap
badTraffic              = 1
fragmentedPackets       = 1
bruteForce              = 1
evasionTechniques       = 1
shellCodes              = 1
denialOfService         = 0tempfile                = /tmp/pytbull.tmp
alertsfile              = /var/log/snort/alert
#alertsfile              = /var/log/suricata/fast.log



[ENV]
sudo                    = /usr/bin/sudo
nmap                    = /usr/bin/nmap
nikto                   = /home/ozan/pytbull/nikto-2.1.5/nikto.pl
niktoconf               = /home/ozan/pytbull/nikto-2.1.5/nikto.conf
hping3                  = /usr/sbin/hping3
tcpreplay               = /usr/bin/tcpreplay
ab                      = /usr/bin/ab
ping                    = /bin/ping
ncrack                  = /usr/local/bin/ncrack
ncrackusers             = /home/ozan/pytbull/data/ncrack-users.txt
ncrackpasswords         = /home/ozan/pytbull/data/ncrack-passwords.txt
localhost               = 127.0.0.1



[FTP]
ftpproto                = ftp
ftpport                 = 21
ftpuser                 = znort
ftppasswd               = benimgizliparolam



[TIMING]
sleepbeforegetalerts    = 2
sleepbeforenexttest     = 2
sleepbeforetwoftp       = 2
urltimeout              = 10



[SERVER]
reverseshellport        = 12345



[TESTS]
clientSideAttacks       = 1
testRules               = 1



pcapReplay              = 1
normalUsage             = 1
ipReputation            = 0



[TESTS_PARAMS]
ipreputationnbtests     = 10

İstemci Servisinin Başlatılması

Not: Sunucu servisi önce başlatılmalıdır.



# ./pytbull -c conf/config.cfg -t server_ip_adresi

Sunucu Tarafının Kurulum Aşamaları

Ön Gereksinimler

apt-get install vsftpd apache2 openssh-server



FTP Servisini Yapılandırma

vsftpd kuruldukdan sonra konfigurasyon dosyasında aşağıdaki değişiklikleri yapmak durumundayız.



# nano /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES



FTP servisine bağlantı için kullanıcı hesabı oluşturmak. Örnek olarak znort adında bir kullanıcı oluşturuyoruz (siz istediğiniz gibi tanımlayabilirsiniz)



# useradd znort
# passwd znort
Enter new UNIX password: benimgizliparolam
Retype new UNIX password: benimgizliparolam
passwd: password updated successfully



Pytbull v2.0 Kurulumu

# cd pytbull

Sunucu Servisinin Başlatılması

Varsayılan olarak 12345 portundan çalışmaktadır, -p parametresi ile port numarasını ihtiyaç duyarsanız değiştirebilirsiniz.



# cd pytbull/server/
# ./pytbull-server.py -p 12345



                                _   _           _ _
                    _ __  _   _| |_| |__  _   _| | |
                   | ‘_ | | | | __| ‘_ | | | | | |
                   | |_) | |_| | |_| |_) | |_| | | |
                   | .__/ __, |__|_.__/ __,_|_|_|
                   |_|    |___/
                      Sebastien Damaye, aldeid.com



Checking root privileges………………………………….. [   OK   ]
Checking port to use……………………………………… [   OK   ]



Server started on port: 12345
Listening…

Örnek Test



# ./pytbull -c conf/config.cfg -t 85.95.238.172
WARNING: No route found for IPv6 destination :: (no default route?)



                                _   _           _ _
                    _ __  _   _| |_| |__  _   _| | |
                   | ‘_ | | | | __| ‘_ | | | | | |
                   | |_) | |_| | |_| |_) | |_| | | |
                   | .__/ __, |__|_.__/ __,_|_|_|
                   |_|    |___/
                      Sebastien Damaye, aldeid.com



What would you like to do?
1. Run a new campaign (will erase previous results)
2. View results from previous campaign
3. Exit
Choose an option: 1



(standalone mode)



+————————————————————————+
| pytbull will set off IDS/IPS alarms and/or other security devices      |
| and security monitoring software. The user is aware that malicious     |
| content will be downloaded and that the user should have been          |
| authorized before running the tool.                                    |
+————————————————————————+
Do you accept (y/n)? y



BASIC CHECKS
————
Checking root privileges………………………………….. [   OK   ]
Checking remote port 21/tcp (FTP)………………………….. [   OK   ]
Checking remote port 22/tcp (SSH)………………………….. [   OK   ]
Checking remote port 80/tcp (HTTP)…………………………. [   OK   ]
Checking path for sudo……………………………………. [   OK   ]
Checking path for nmap……………………………………. [   OK   ]
Checking path for nikto…………………………………… [   OK   ]
Checking path for niktoconf……………………………….. [   OK   ]
Checking path for hping3………………………………….. [   OK   ]
Checking path for tcpreplay……………………………….. [   OK   ]
Checking path for ab……………………………………… [   OK   ]
Checking path for ping……………………………………. [   OK   ]
Checking path for ncrack………………………………….. [   OK   ]
Checking path for ncrackusers……………………………… [   OK   ]
Checking path for ncrackpasswords………………………….. [   OK   ]
Removing temporary file…………………………………… [   OK   ]
Cleaning database………………………………………… [   OK   ]



TESTS
————
Client Side Attacks………………………………………. [   yes  ]
Test Rules………………………………………………. [   yes  ]
Bad Traffic……………………………………………… [   yes  ]
Fragmented Packets……………………………………….. [   yes  ]
Brute Force……………………………………………… [   yes  ]
Evasion Techniques……………………………………….. [   yes  ]
ShellCodes………………………………………………. [   yes  ]
Denial of Service………………………………………… [   no   ]
Pcap Replay……………………………………………… [   yes  ]
Normal Usage…………………………………………….. [   yes  ]
IP Reputation……………………………………………. [   no  ]

CLIENT SIDE ATTACKS
————
Checking if reverse shell is running on remote host………….. [   OK   ]
TEST #1 – 001e2710555613a82e94156d3ed9c289………………….. [  done  ]
TEST #2 – 7b9e1c1b479447506cc046a5d8219eca………………….. [  done  ]
TEST #3 – 004e74d54dcf79c641d5cf8a615488a0………………….. [  done  ]
TEST #4 – 7d6e9af1018c10f1b7dfa5169a35d941………………….. [  done  ]
TEST #5 – 0106fb569e87e02fc88d496064abdf19………………….. [  done  ]
TEST #6 – 7f73dd439572409a64bc4dd0d603aacf………………….. [  done  ]
TEST #7 – 02bfe34bea55e327cfdead9cff215f33………………….. [  done  ]
TEST #8 – 7f7413bd2a4a0f001efd0305f4f56acf………………….. [  done  ]
TEST #9 – 030423da29e1e6f4a527518126de4aeb………………….. [  done  ]
TEST #10 – 80202a9c51d8544bac7ac273428dd97c…………………. [  done  ]
TEST #11 – 03042cc3786dafdb941019488d4cad3e…………………. [  done  ]
TEST #12 – 80f20af63314be2e8c79d8ca99eeb713…………………. [  done  ]
TEST #13 – 03546e59967af0c2dbf609013934cd07…………………. [  done  ]
TEST #14 – 82a5f96d1834411a3b5af9c21ffb14a8…………………. [  done  ]
TEST #15 – 04095314d51057a13e21908de1266fc1…………………. [  done  ]
TEST #16 – 82a7c8fdacca91b1bd0fdc2407674f50…………………. [  done  ]
TEST #17 – 049675afd5c9505b9715872d499b9389…………………. [  done  ]
TEST #18 – 82eeda4a754bf163d406e3e205df97e9…………………. [  done  ]
TEST #19 – 0700bffe83561c1e2a5156d89de68f6d…………………. [  done  ]
TEST #20 – 83220f00d3b3cde40bd3bf58c78ba899…………………. [  done  ]
TEST #21 – 0733c4e2122cdfcfdd4699a3cbdc8b40…………………. [  done  ]
TEST #22 – 853027bec65b3f2434788a70d4d15d89…………………. [  done  ]
TEST #23 – 08da26158b76ca38e0ddb740aaf9b4ff…………………. [  done  ]
TEST #24 – 872537348b6f1ef77d74f1d298978d72…………………. [  done  ]
TEST #25 – 0ab4a29af51b17335abbe0eb861784aa…………………. [  done  ]
TEST #26 – 896c14bc7ff88923e35aa824ab6c72da…………………. [  done  ]
TEST #27 – 0d711f2049a6004cffe447dab78cd7e5…………………. [  done  ]
TEST #28 – 8ae719cdd29f0e6af4d4dd321cc40355…………………. [  done  ]
TEST #29 – 0e0c3a177b898c523e8303940ae99077…………………. [  done  ]
TEST #30 – 8bf83af16e95ff0187622579b3d453d9…………………. [  done  ]
TEST #31 – 0e1fc785eff45ff0b140dbf61abf3eab…………………. [  done  ]
TEST #32 – 911d2b98b29cf53daa2ca956e6a456e1…………………. [  done  ]
TEST #33 – 0f24780097467c4c54f8f306346dff37…………………. [  done  ]
TEST #34 – 911eb6c6524711c194320461b1602ace…………………. [  done  ]
TEST #35 – 0f5d42aa99b17eabddc19a46013b517b…………………. [  done  ]
TEST #36 – 92db03a6d1db9a9012ccc7bd9b45ed7a…………………. [  done  ]
TEST #37 – 0fc9c4e1e2148912188dd913ff95149e…………………. [  done  ]
TEST #38 – 933912d26eeef9d3c220679e1cc4f113…………………. [  done  ]
TEST #39 – 100cf902ac31766f7d8a521eeb6f8d68…………………. [  done  ]
TEST #40 – 940ae58370cd3ed31f9fd7ca8672fa27…………………. [  done  ]
TEST #41 – 10c35deb541e58b115ea2c682edb26ea…………………. [  done  ]
TEST #42 – 9476ed0a007ba332b7da0a657b1608bd…………………. [  done  ]
TEST #43 – 10e15dd9b11528762c182b04f80e0a03…………………. [  done  ]
TEST #44 – 949265ee1d3e587152a23311a85b3be9…………………. [  done  ]
TEST #45 – 116c4ad3656000b7c0908c13470d0001…………………. [  done  ]
TEST #46 – 9516a32b2aa7beccc96eea174ade7ce0…………………. [  done  ]
TEST #47 – 116d92f036f68d325068f3c7bbf1d535…………………. [  done  ]
TEST #48 – 9666cf5956922b4127c600b6a01f8488…………………. [  done  ]
TEST #49 – 11dbb8d7924595e24c61eca8c9248834…………………. [  done  ]
TEST #50 – 97ab9a60226f2af051251255254e8fbf…………………. [  done  ]

TEST RULES
————
TEST #51 – Simple LFI…………………………………….. [  done  ]
TEST #52 – LFI using NULL byte…………………………….. [  done  ]
TEST #53 – Full SYN Scan………………………………….. [  done  ]
TEST #54 – Full Connect() Scan…………………………….. [  done  ]
TEST #55 – SQL Injection………………………………….. [  done  ]
TEST #56 – Netcat Reverse Shell……………………………. [  done  ]
TEST #57 – Nikto Scan…………………………………….. [  done  ]



BAD TRAFFIC
————
TEST #58 – Nmap Xmas scan…………………………………. [  done  ]
TEST #59 – Malformed Traffic………………………………. [  done  ]
TEST #60 – Land Attack……………………………………. [  done  ]



FRAGMENTED PACKETS
————
TEST #61 – Ping of death………………………………….. [  done  ]
TEST #62 – Nestea Attack 1/3………………………………. [  done  ]
TEST #63 – Nestea Attack 2/3………………………………. [  done  ]
TEST #64 – Nestea Attack 3/3………………………………. [  done  ]



BRUTE FORCE
————
TEST #65 – Bruteforce against FTP with ncrack……………….. [  done  ]

EVASION TECHNIQUES
————
TEST #66 – Nmap decoy test (6th position)…………………… [  done  ]
TEST #67 – Nmap decoy test (7th position)…………………… [  done  ]
TEST #68 – Hex encoding…………………………………… [  done  ]
TEST #69 – Nmap scan with fragmentation…………………….. [  done  ]
TEST #70 – Nikto Random URI encoding……………………….. [  done  ]
TEST #71 – Nikto Directory self reference…………………… [  done  ]
TEST #72 – Nikto Premature URL ending………………………. [  done  ]
TEST #73 – Nikto Prepend long random string…………………. [  done  ]
TEST #74 – Nikto Fake parameter……………………………. [  done  ]
TEST #75 – Nikto TAB as request spacer……………………… [  done  ]
TEST #76 – Nikto Change the case of the URL…………………. [  done  ]
TEST #77 – Nikto Windows directory separator………………… [  done  ]
TEST #78 – Nikto Carriage return as request spacer…………… [  done  ]
TEST #79 – Nikto Binary value as request spacer……………… [  done  ]
TEST #80 – Javascript Obfuscation………………………….. [  done  ]



SHELLCODES
————
TEST #81 – SHELLCODE ** sparc setuid 0……………………… [  done  ]
TEST #82 – SHELLCODE x86 setgid……………………………. [  done  ]
TEST #83 – SHELLCODE IRIX SGI + NOOP……………………….. [  done  ]
TEST #84 – SHELLCODE x86 setgid 0 && SHELLCODE x86 setuid 0…… [  done  ]
TEST #85 – OVERFLOW attempt……………………………….. [  done  ]
TEST #86 – SHELLCODE x86 setuid 0………………………….. [  done  ]
TEST #87 – win32_bind_dllinject – EXITFUNC=seh DLL=c: LPORT=4… [  done  ]
TEST #88 – win32_bind_dllinject – EXITFUNC=seh DLL=c: LPORT=4… [  done  ]
TEST #89 – win32_bind – EXITFUNC=seh LPORT=4444 Size=709 Encod… [  done  ]
TEST #90 – db “cmd.exe /c net user USERNAME PASSWORD /ADD && n… [  done  ]
TEST #91 – Cisco: Creates a new VTY, allocates a password then… [  done  ]
TEST #92 – Rothenburg Shellcode……………………………. [  done  ]
TEST #93 – Mainz/Bielefeld Shellcode……………………….. [  done  ]



PCAP REPLAY
————
TEST #94 – slammer worm…………………………………… [  done  ]



NORMAL USAGE
————
apr_sockaddr_info_get() for %target%: Unknown error 14643 (14643)
TEST #95 – ApacheBench 10 requests…………………………. [  done  ]
TEST #96 – Standard ping………………………………….. [  done  ]



———————–
DONE. Check the report.
———————–

Webserver started at http://127.0.0.1:8080
(use ^C to stop)



[27/Jul/2013:03:02:57] ENGINE Listening for SIGHUP.
[27/Jul/2013:03:02:57] ENGINE Listening for SIGTERM.
[27/Jul/2013:03:02:57] ENGINE Listening for SIGUSR1.
[27/Jul/2013:03:02:57] ENGINE Bus STARTING
[27/Jul/2013:03:02:57] ENGINE Started monitor thread ‘_TimeoutMonitor’.
[27/Jul/2013:03:02:57] ENGINE Serving on 127.0.0.1:8080
[27/Jul/2013:03:02:57] ENGINE Bus STARTED

Rapor

Çalışma tamamlandıkdan sonra http://127.0.0.1:8080 web arabirimine bağlanarak pytbull’un ürettiği raporu yorumlayabilirsiniz.





Sorun Çözme

Kurulum aşamasında karşılaşacağınız çeşitli sorunlar ve çözümleri bu başlık altında toplanacaktır.
  1. FTP 550 Error

***ERROR: FTP Error, 550 Failed to open file.
Check your configuration (section FTP in config.cfg).
Also check privileges on remote host.
  1. Çözüm

Sunucu tarafında aşağıdaki komutlarla sorunu çözebilirsiniz. FTP sunucuda /var/log/snort/alert dosyasına ulaşamadığı için bu hatayı alıyorsunuz.



# mkdir -p /var/log/snort/
# touch alert



  1. Uygulamaların Dizinlerini Bulmak

Konfigurasyon dosyasında uygulamaların tam dizin yolunu yazmanız gerekiyor. Bazı durumlarda uygulama kurulu olduğu halde ulaşılamadı mesajı alabilirsiniz.
  1. Çözüm

Aşağıdaki komutlardan biri ile uygulamanın tam yolunu bulabilirsiniz.
# whereis uygulama_adi



# find / -name uygulama_adi



Örneğin hping3 uygulaması hangi dizinde bulalım;
# whereis hping3
hping3: /usr/sbin/hping3 /usr/share/man/man8/hping3.8.gz



binary uygulama /usr/sbin/hping3  dizini altındadır.



Kaynaklar