Python:Code simple Network Intrussion Detection System using raw_socket
#1
[Image: dnf6dd.jpg]
Halo teman - teman kali ini saya akan share code yang baru saja sy buat setelah mempost artikel network packet sniffer .
Sedikit tentang Simple network intrussion detection system.
NIDS (Network Intrussion Detection System) itu kasarnya pengembangan dari firewall yg biasa kita pake, kata "Detection" memberikan definisi bahwa NIDS hanya bisa memberikan alert jika paket di dalam jaringan diindikasikan berbahaya (NIDS punya pattern utk tau paket2 bahaya ini behaviournya seperti apa, contoh: ada paket TCP dgn flagbit SYN yg banyak dlm waktu yg singkat [anggap lah itu cth pola dari SYN flood. Mungkin temen2 disini pada jago kalo soal itu]), nah script ini hanya potongan singkat gimana NIDS bekerja. Mungkin pada tau SNORT kan yg logonya gbr babi?! nah kasarnya ini implementasi sangat sederhana dari si snort.

Script python ini cukup dieksekusi biasa seperti script python lainnya di mesin Linux kalian. script akan tanya string apa yg akan difilter (misal: "sex"). setelah script running silahkan dites menggunakan protokol apapun (kecuali SSL. karena pasti isi paketnya di encrypt). masukkan kata "sex" (contoh: lu buka YM terus tulis status lu ada kata "sex" nya, atau browsing http [bkn https] yg ada konten string "sex" nya), nanti script akan capture dan kasih warning (disini saya tambah juga utk record IP source + IP destination dari paket yg kontennya ada string "sex" tadi ke log file "blacklist.log")

nah.. ini bisa kalian kembangkan ke state big apps. Kita bisa buat SNORT versi kita sendiri bukan? so gimana kalo kita gabung record IP ini kemudian datanya kita passing ke rule iptables utk blok IP tersebut.. hasilnya jadi NIPS (Network Intrussion Prevention System. Ada kata "Prevent" yg tidak hanya alert saja, tapi sudah bertindak/melakukan sesuatu, yaitu membuat rule iptables secara dinamis [bisa berubah2 tergantung scripting kita])

algorthma yang sy gunakan adalah string matching . yaitu mencocokan/filter kata yang di input dengan packet data yang sudah tersimpan dalam var 'packet' yang di dapatkan dalam code: if re.search(filter_string,packet):doing dengan sedikit bantuan dari regex(Regular expression) untuk pencockan datanya .ya singkatnya hanya parsing content paketnya, catat ke log, trus ada treak2 'alert!' di prompt kalian Smile belum sampe parsing header protokolnya lebih detail utk siapin pattern2 yg diindikasikan attacker. ok silahkan di nikmati source code bisa dikembangkan semau kalian.


Code:
#!/usr/bin/python
# simple Network Intrussion Detection System using
# raw_socket module (please running this script example
# with sudo/root because raw socket must be root
# priviledge
#
# Coder jimmyromanticdevil
# Algorthm i use string matching for match text filter_string on ip header data = packet
# if re.search(filter_string,packet):doing
# adopt from my code network packet sniffer
# network packet sniffer : http://jimmyromanticdevil.wordpress.com/2011/12/06/pythonnetwork-packet-sniffer/
# http://indonesianbacktrack.or.id & jimmyromanticdevil.wordpress.com
#-----------------------------------------------

import socket
import sys
from struct import *
import string
import re  
import time
from datetime import datetime
def proses1(socket_setup,filter_string):
    packet = socket_setup.recvfrom(65565)
    packet = packet[0]
    ip_header = packet[0:20]
    iph = unpack('!BBHHHBBH4s4s' , ip_header)
    s_addr = socket.inet_ntoa(iph[8]);
    d_addr = socket.inet_ntoa(iph[9]);
    try:
         log_file = open('blacklist.log','a+')
    except:
         print 'file not found'
    try:
       if re.search(filter_string,packet):
          data_get =  """
Alert Found filter string : %s          
Source Address : %s
Destination Address : %s
time : %s
"""%(filter_string,str(s_addr),str(d_addr),str(datetime.now()))
          log_file.write(data_get+'\n')
          print data_get
          log_file.close()
    except Exeption ,err:
       print [err]
      
def main():
    socket_setup = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
    filter_string = raw_input('Input Filter string :')
    while True:
       try:
         proses1(socket_setup,filter_string)
       except Exception ,er:
         print er
         sys.exit()
         break
        
if __name__ == "__main__":
     main()


Special thanks to my refrensi :
5ynl0rd code simple network intrussion detect system using pcapy module

special thanks person:
5ynl0rd,Ardhe defourteens aka hardiknas,Kiddies,Ahmad asto,all my broth n sistr in DCC,indonesianbacktrack team,Tecon-Crew Labs,all my friend & You....

#2
buset gk ada obatnya nih .. ijin pelajari dulu om

#3
ni sensitif case gak ya?pingin nyoba jadinya...trimkasih om Smile

#4
jadi kepengen buat script sendiri heheh Smile thanks om for share
I am an engineer, thats what i am






Users browsing this thread: 1 Guest(s)