felmoltor

Kippo statistics extraction from kippo.log

Aug 23rd, 2014
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.24 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. TOPIP=15
  4. TOPUP=30
  5. TOPU=30
  6. TOPP=30
  7. TOPLU=15
  8. TOPLP=15
  9. GEOLITEDB="/home/<username>/maxmind/GeoIPCountryWhois.db"
  10.  
  11. #================================
  12.  
  13. ip2dec () {
  14.     local a b c d ip=$@
  15.     IFS=. read -r a b c d <<< "$ip"
  16.     printf '%d\n' "$(((a * 256 ** 3) + (b * 256 ** 2) + (c * 256) + d))"
  17. }
  18.  
  19. #================================
  20.  
  21. # saca el ranking de IPs con mas intentos de fuerza bruta
  22. echo "===================="
  23. echo "= Top $TOPIP source IP ="
  24. echo "===================="
  25. iplist=$(grep "login attempt" kippo.log* kippo.log | cut -f 6,9 -d' ' | cut -f3 -d',' | sed s/\\]\\s\\[/:/g | tr -d ']' | cut -f1 -d: | gawk '{for(i=1;i<=NF;i++)a[$i]++}END{ for(o in a) printf "%s:%s\n ",o,a[o]}' | sort -t: -k2 -nr | tr -d ' ' | head -n $TOPIP)
  26. for ip_and_count in $iplist
  27. do
  28.     country="<UNKNOWN COUNTRY>"
  29.     if [[ -f $GEOLITEDB ]]; then
  30.         ip=$(echo $ip_and_count | cut -d':' -f1)
  31.         ipdec=$(ip2dec $ip)
  32.         query="select cty_name from GeoIPCountryWhois where $ipdec between CAST(initipdec AS INTEGER) and CAST(endipdec AS INTEGER) limit 1;"
  33.         country=$(sqlite3 $GEOLITEDB "$query")
  34.     else
  35.         echo "Can't find GeoIP database $GEOLITEDB"
  36.     fi
  37.     echo "$ip_and_count ($country)"
  38. done
  39.  
  40. # saca el ranking de redes clase C con mas intentos de fuerza bruta
  41. echo "========================="
  42. echo "= Top $TOPIP source class C ="
  43. echo "========================="
  44. netlist=$(grep "login attempt" kippo.log* kippo.log | cut -f 6,9 -d' ' | cut -f3 -d',' | sed s/\\]\\s\\[/:/g | tr -d ']' | cut -f1 -d: | cut -f1,2,3 -d. | gawk '{for(i=1;i<=NF;i++)a[$i]++}END{ for(o in a) printf "%s:%s\n ",o,a[o]}' | sort -t: -k2 -nr | tr -d ' ' | head -n $TOPIP)
  45. for net_and_count in $netlist
  46. do
  47.     country="<UNKNOWN COUNTRY>"
  48.     if [[ -f $GEOLITEDB ]]; then
  49.         net=$(echo $net_and_count | cut -d':' -f1)
  50.         count=$(echo $net_and_count | cut -d':' -f2)
  51.         ip="$net.1"
  52.         ipdec=$(ip2dec $ip)
  53.         query="select cty_name from GeoIPCountryWhois where $ipdec between CAST(initipdec AS INTEGER) and CAST(endipdec AS INTEGER) limit 1;"
  54.         country=$(sqlite3 $GEOLITEDB "$query")
  55.     else
  56.         echo "Can't find GeoIP database $GEOLITEDB"
  57.     fi
  58.     echo "$net.0/24:$count ($country)"
  59. done
  60.  
  61.  
  62. echo "=========================="
  63. echo "= Top $TOPUP user/passwords ="
  64. echo "=========================="
  65.  
  66. grep  "login attempt" kippo.log* kippo.log  | awk '{print $9}' | tr -d ']' | tr -d '[' | sort | uniq -c | sort -nr  | head -n $TOPUP
  67.  
  68. echo "==================="
  69. echo "= Top $TOPU users ="
  70. echo "==================="
  71.  
  72. grep  "login attempt" kippo.log* kippo.log  | awk '{print $9}' | awk '{FS="/"}{print $1}' | tr -d ']' | tr -d '[' | sort | uniq -c | sort -nr  | head -n $TOPU
  73.  
  74. echo "======================="
  75. echo "= Top $TOPP passwords ="
  76. echo "======================="
  77.  
  78. grep  "login attempt" kippo.log*  kippo.log | awk '{print $9}' | awk '{FS="/"}{print $2}' | tr -d ']' | tr -d '[' | sort | uniq -c | sort -nr  | head -n $TOPP
  79.  
  80. echo "======================="
  81. echo "= Last $TOPLU users ="
  82. echo "======================="
  83.  
  84. # grep  "login attempt" kippo.log*  kippo.log | awk '{print $9}' | awk '{FS="/"}{print $1}' | tr -d ']' | tr -d '[' | tail -n $TOPLU
  85. echo "" > .tmp.txt
  86. for klog in `ls -ltr kippo* | awk '{print $9}'`
  87. do
  88.     grep -h  "login attempt" $klog | tail -n $TOPLU | awk '{print $9" ("$1" "$2")"}' | sed -r 's/\[(.*)\/(.*)\]( \(.*\))/\1\3/g' >> .tmp.txt
  89. done
  90. cat .tmp.txt | tail -n $TOPLU
  91.  
  92. echo "======================="
  93. echo "= Last $TOPLP passwords ="
  94. echo "======================="
  95.  
  96. # grep  "login attempt" kippo.log*  kippo.log | awk '{print $9}' | awk '{FS="/"}{print $2}' | tr -d ']' | tr -d '[' | tail -n $TOPLP
  97. echo "" > .tmp.txt
  98. for klog in `ls -ltr kippo* | awk '{print $9}'`
  99. do
  100.     grep  -h "login attempt" $klog | tail -n $TOPLP | awk '{print $9" ("$1" "$2")"}' | sed -r 's/\[(.*)\/(.*)\]( \(.*\))/\2\3/g' >> .tmp.txt
  101. done
  102. cat .tmp.txt | tail -n $TOPLP
  103. rm .tmp.txt
  104.  
  105. echo "==================="
  106. echo "= Fails / Success ="
  107. echo "==================="
  108. success=$(grep -E "login attempt \[.*/.*\] succeeded" kippo.log* kippo.log | wc -l)
  109. fails=$(grep -E "login attempt \[.*/.*\] failed" kippo.log* kippo.log | wc -l)
  110. echo "Nº Authenticatiuccess: $success"
  111. echo "Nº Authentication Fails: $fails"
  112. #percentage=$((($success / $fails)*100))
  113. #echo "Percentage of success: $percentage"
Advertisement
Add Comment
Please, Sign In to add comment