Wordfence, mon analyse à partir des logs d’Apache des attaques par injection SQL

J’ai donc les logs d’apache du 14/03/2008 à aujourd’hui et j’ai installé Wordfence le 7/12/2016. Je veux voir si les attaques par injection SQL en mode GET sont nouvelles ou pas. Et je veux voir si cela correspond à la date d’installation de Wordfence.

Quelques commandes de base pour rappel :

  • Décompression de tous les fichiers :
    • gunzip access.log.*.gz
  • On compte le nombre de fichier :
    • ls -l LogsWeb/access.log.* | wc -l
      3149
  • On regarde l’espace disque :
    • du -sh LogsWeb
      6,9G LogsWeb
  • On compte le nombre de ligne :
    • wc -l LogsWeb/access.log.* |  awk ‘{total += $1} END {print « Total  » total}’
      Total 53549284
  • On recherche le mot « Union » sens faire attention à la casse.Attention on ne regarde que les requêtes de type GET et non celle de type POST.
    •  time grep -w « UNION » LogsWeb/* > union.txt
      real 3m21.170s
      user 0m44.107s
      sys 0m5.489s
    • wc -l union.txt 
      159 union.txt
    • time grep -i « UNION » LogsWeb/* > union.txt
      real 6m46.629s
      user 3m27.873s
      sys 0m5.425s
    • wc -l union.txt
      66644 union.txt
    • grep -i « select » union.txt > select.txt
    • wc -l select.txt
      16008 select.txt

J’ai donc fait une révision de « du », « awk », « ls », « gunzip », « grep » (avec ‘-w’ et sans  casse ‘-i’) , « time » 😉 .
J’ai donc eu 16008 tentatives d’injections par injection avec la méthode GET. Maintenant on va chercher les IPs afin de pouvoir les filtrer.

cat select.txt | sed 's/:/ /g' | awk '{print $2}' | sort -n | uniq -c | sort -n
   1 113.252.230.71
   1 148.251.135.107
   1 148.251.138.92
   1 178.137.164.233
   1 178.159.253.100
   1 178.162.198.109
   1 178.211.187.178
   1 178.63.42.237
   1 178.75.64.78
   1 185.84.108.230
   1 187.131.44.199
   1 188.143.232.29
   1 194.28.88.54
   1 194.63.140.48
   1 195.248.234.190
   1 195.54.163.119
   1 2.9.190.125
   1 212.224.118.66
   1 213.135.150.145
   1 213.183.62.189
   1 31.41.255.10
   1 37.140.192.13
   1 37.140.192.63
   1 46.118.159.220
   1 46.235.82.178
   1 5.206.77.93
   1 5.206.82.16
   1 5.206.98.179
   1 5.254.97.75
   1 5.45.124.66
   1 5.45.65.187
   1 5.61.37.126
   1 5.61.39.55
   1 5.9.44.211
   1 50.62.176.175
   1 62.109.6.103
   1 62.113.208.198
   1 62.39.79.146
   1 69.195.124.168
   1 77.120.125.35
   1 77.221.130.139
   1 77.221.130.145
   1 77.222.56.219
   1 78.132.147.199
   1 78.46.48.131
   1 79.141.166.13
   1 81.177.139.161
   1 81.177.6.121
   1 81.177.6.72
   1 81.7.10.54
   1 82.197.124.81
   1 86.110.75.93
   1 87.242.64.203
   1 90.189.192.100
   1 91.201.215.149
   1 91.218.228.154
   1 91.219.194.22
   1 91.219.194.31
   1 91.230.211.225
   1 92.63.88.42
   1 93.125.99.11
   1 93.190.40.24
   1 94.153.139.45
   1 94.199.180.70
   1 94.250.254.43
   1 95.181.178.59
   1 95.71.17.208
   2 107.150.33.138
   2 193.105.114.5
   2 217.37.66.51
   2 46.165.208.108
   2 46.249.52.231
   2 5.206.71.162
   2 5.206.89.154
   2 62.232.8.82
   2 88.198.219.50
   3 108.168.219.174
   3 109.200.0.202
   3 13.92.118.60
   3 177.185.194.138
   3 177.185.194.47
   3 177.98.11.154
   3 195.234.228.90
   3 203.171.33.38
   3 209.15.196.170
   3 216.185.43.135
   3 23.91.70.121
   3 5.178.68.242
   3 5.206.71.235
   3 5.22.159.130
   3 64.87.23.55
   3 66.76.174.2
   3 67.216.79.204
   3 82.208.76.150
   3 87.106.179.116
   3 89.38.209.57
   3 94.125.54.76
   4 176.9.91.186
   4 177.12.174.145
   4 178.63.18.196
   4 188.165.246.177
   4 193.200.80.26
   4 194.6.233.29
   4 197.242.159.42
   4 198.143.164.221
   4 216.249.107.200
   4 23.91.70.77
   4 24.222.4.86
   4 31.178.117.94
   4 31.186.8.61
   4 37.205.0.65
   4 41.185.31.40
   4 62.149.132.252
   4 64.251.25.176
   4 73.205.105.33
   4 74.63.228.226
   4 81.88.48.113
   4 82.165.24.123
   4 93.63.188.181
   5 104.209.39.137
   5 173.201.216.68
   5 177.185.194.92
   5 188.143.235.81
   5 204.8.156.142
   5 209.151.168.83
   5 213.246.49.97
   5 216.139.249.105
   5 216.201.148.210
   5 23.91.70.95
   5 23.96.97.203
   5 37.9.53.67
   5 72.34.232.5
   5 83.5.229.144
   5 83.64.189.179
   5 94.73.145.50
   5 98.19.222.133
   6 103.21.58.191
   6 173.0.139.89
   6 177.185.192.77
   6 178.238.229.54
   6 184.168.192.31
   6 188.143.234.246
   6 188.143.235.121
   6 195.154.199.237
   6 195.74.38.14
   6 202.124.241.203
   6 204.93.196.218
   6 216.119.112.144
   6 216.46.178.254
   6 217.37.125.121
   6 50.63.197.7
   6 62.210.152.84
   6 62.210.152.90
   6 66.29.216.40
   6 87.242.112.35
   7 128.117.43.92
   7 148.247.67.22
   7 23.91.70.63
   7 37.59.255.19
   7 91.200.12.65
   8 177.185.194.45
   8 213.247.63.11
   8 37.205.0.60
   8 46.4.154.173
   8 66.96.128.60
   8 96.47.2.10
   9 167.114.42.94
   9 72.52.91.19
   9 91.224.160.60
  10 103.3.173.97
  10 95.211.70.193
  11 158.58.168.211
  11 173.0.129.149
  11 180.248.17.248
  12 195.140.210.83
  12 208.52.175.27
  13 195.154.199.152
  13 84.245.33.104
  14 128.6.224.107
  14 188.82.12.253
  14 213.152.176.93
  14 94.228.220.68
  15 173.254.216.67
  16 68.48.156.101
  17 213.142.132.18
  17 64.31.44.6
  19 64.113.32.29
  20 128.52.128.105
  20 189.38.80.71
  24 173.242.121.199
  30 194.6.233.33
  32 41.108.52.93
  33 129.123.7.6
  34 158.85.253.245
  36 213.174.1.62
  37 93.157.174.74
  39 128.2.142.104
  53 94.180.47.215
  55 46.147.172.223
  57 92.53.117.140
  61 74.84.136.105
  63 200.50.71.125
  63 81.169.144.135
  63 93.93.71.190
  64 185.6.18.76
  64 83.143.133.13
  65 18.187.1.68
  65 94.25.126.74
  66 173.254.28.53
  66 185.26.122.13
  67 173.214.189.206
  67 185.33.60.52
  67 92.53.96.93
  68 185.7.214.138
  68 213.5.68.26
  70 5.101.156.98
  71 192.185.2.204
  71 195.128.174.121
  72 195.3.105.73
  72 213.128.67.21
  72 82.200.207.18
  73 89.161.234.187
  75 188.165.211.180
  76 92.61.157.140
  85 192.185.176.153
  87 49.88.12.82
  91 213.251.182.106
  95 196.4.225.19
  97 5.101.157.64
  97 77.109.141.138
 100 213.251.182.10
 100 91.222.8.126
 103 193.110.73.2
 109 62.162.182.156
 112 217.67.30.32
 115 185.5.53.22 (Les lituaniens vu par Wordfence, pas très bon au classement ;) )
 116 192.185.2.191
 117 207.210.200.106
 117 92.53.123.104
 118 108.167.189.22
 120 221.186.73.196
 124 82.146.38.108
 129 81.177.135.201
 130 104.131.115.173
 131 188.128.142.131
 131 77.92.102.133
 132 195.46.43.238
 132 212.193.234.176
 132 23.229.4.214
 133 185.26.122.55
 140 178.208.83.17
 141 77.93.218.17
 143 162.243.49.74
 143 78.110.50.115
 146 104.193.143.55
 146 198.57.247.177
 147 69.89.22.120
 167 62.141.41.180
 167 80.66.68.49
 167 85.17.60.183
 168 72.29.73.71
 170 194.228.3.42
 170 213.228.185.13
 170 37.8.121.245
 170 62.189.126.85
 170 75.125.220.170  
 195 197.15.248.136 (ATI - Agence Tunisienne Internet -  Tunis)
 205 66.117.3.211 (UNITED STATES)
 207 216.239.0.120 (UNITED STATES)
 207 62.193.199.184 (AMEN - Agence des Médias Numériques - 12/14, Rond-point des champs elysees 75008 Paris, France ) Cocorico ... on est présent ;) ... attaque du type "jatest7.php outifle".
 209 210.58.101.147 (Taipei City, Taiwan, R.O.C.)
 210 211.115.125.46 (135 Jungdae-ro Songpa-gu Seoul)
 220 31.43.19.174 (Ukraine)
 328 69.61.23.170 (UNITED STATES)
 361 195.70.35.54 (Budapest, Hongrie)
 404 211.110.18.248 (135 Jungdae-ro Songpa-gu Seoul)
 404 69.16.206.5 (UNITED STATES) 
 411 64.59.86.2 (UNITED STATES) 
 414 120.118.219.8 (12F, No 106, Sec. 2, Heping E. Rd., Taipei)
 648 178.137.168.166 (Kyivstar GSM, Kiev, Ukraine)
 843 104.207.146.56 (UNITED STATES) 
 864 108.61.197.166 (UNITED KINGDOM)
 1513 104.207.150.44 (UNITED STATES) 

Le gagnant est le 104.207.150.44 (UNITED STATES) ! Bravo pour ses 1513 tentatives d’injection. Ah le pays des libertés …. bon palmarès.

Je retrouve l’infection de Wordfence des Lituaniens :

LogsWeb/access.log.20161214:185.5.53.22 - - [14/Dec/2016:20:22:03 +0100] "GET /?lang=en99999%22%20union%20select%20unhex(hex(version()))%20--%20%22x%22=%22x HTTP/1.1" 403 226 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; dial; SV1; .NET CLR 1.0.3705)" "www.cyber-neurones.org"
LogsWeb/access.log.20161116:204.93.196.218 - - [16/Nov/2016:05:58:54 +0100] "GET /2015/02/oopad-non-merci/?lang=es';declare%20@b%20cursor;declare%20@s%20varchar(8000);declare%20@w%20varchar(99);set%20@b=cursor%20for%20select%20DB_NAME()%20union%20select%20name%20from%20sys.databases%20where%20(has_dbaccess(name)!=0)%20and%20name%20not%20in%20('master','tempdb','model','msdb',DB_NAME());open%20@b;fetch%20next%20from%20@b%20into%20@w;while%20@@FETCH_STATUS=0%20begin%20set%20@s='begin%20try%20use%20%5B'%2B@w%2B'%5D;declare%20@c%20cursor;declare%20@d%20varchar(4000);set%20@c=cursor%20for%20select%20''update%20%5B''%2BTABLE_NAME%2B''%5D%20set%20%5B''%2BCOLUMN_NAME%2B''%5D=%5B''%2BCOLUMN_NAME%2B''%5D%2Bcase%20ABS(CHECKSUM(NewId()))%259%20when%200%20then%20''''''%2Bchar(60)%2B''div%20style=%22display:none%22''%2Bchar(62)%2B''low%20dose%20naltrexone%20buy%20uk%20''%2Bchar(60)%2B''a%20href=%22http:''%2Bchar(47)%2Bchar(47)%2B''naltrexonealcoholismmedication.com''%2Bchar(47)%2B''%22''%2Bchar(62)%2B''''''%

Je laisse quelques exemples en novembre, de tentative d’injection. Maintenant un peu de statistique pour voir le nombre d’attaque en fonction de l’année :

cat select.txt | awk '{print $4}' | sed 's/\// /g' | sed 's/:/ /g' | awk '{print $3}' | sort -n | uniq -c
2733 2008
1595 2009
  14 2010
  23 2011
 686 2012
 660 2013
2593 2014
3341 2015
4363 2016

Record pour l’année 2016 avec 4363 tentatives d’injection !

Et sur l’année 2016 :

cat select.txt | awk '{print $4}' | grep "2016" | sed 's/\// /g' | sed 's/:/ /g' | awk '{print $2 " " $3}' | sort -n | uniq -c
 459 Apr 2016
  94 Aug 2016
 224 Dec 2016
1685 Feb 2016
  13 Jan 2016
 513 Jul 2016
 158 Jun 2016
 111 Mar 2016
  97 May 2016
  16 Nov 2016
 492 Oct 2016
 501 Sep 2016

Je dirai que le mois de Novembre est léger par rapport à Févier, mais effectivement en Décembre on recommence.

Et je fini pas la liste des variables les plus attaqués par l’injection :

cat union.txt | awk -F "?" '{print $2}' | awk -F "=" '{print $1}' | sort -n | uniq -c | sort -n
...
24 fbconnect_action
53 edit
56 sa
57 feed
60 cid
71 id_ville
103 13-zoo&lang
114 format
117 mt
162 imgurl
279 page
284 option
295 replytocom
332 post
337 main_page
343 url
682 fb_action_ids
949 shared
983 page_id
1257 action
5949 share
8737 lang
8927 pg
13307 ver

L’idéal c’est de mettre les noms des variables en espéranto 😉 On retrouve des célèbre faille sur WordPress :

https://lwthacking.blogspot.com/2012/09/hacking-wordpress-websites-with-sql.htmlfbconnect_action

 

Wordfence, plugin de sécurité sous WordPress

Pour l’instant je suis en phase d’observation. Il est vrai que certains des conseils étaient bons, comme supprimer des fichiers de logs ou d’installation. Ensuite je trouve vraiment bien de tracer toutes les connexions à la page d’admin et d’envoyer un email à chaque connexion.

Maintenant il va falloir que j’analyse les attaques :

The Wordfence Web Application Firewall has blocked 253 attacks over the last 10 minutes. Below is a sample of these recent attacks:

décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(vErsion(),0x27,0
décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en99999″ union select unhex(hex(version())) — « x »= »x
décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en99999′ union select unhex(hex(version())) — ‘x’=’x
décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en » or (1,2)=(select*from(select name_const(CHAR(111,108,111,108,111,115,104,101,114),1),name_const(
décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en’ or (1,2)=(select*from(select name_const(CHAR(111,108,111,108,111,115,104,101,114),1),name_const(
décembre 14, 2016 7:22   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en or (1,2)=(select*from(select name_const(CHAR(111,108,111,108,111,115,104,101,114),1),name_const(C
décembre 14, 2016 7:21   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en’ And SLeep(3) UniON SEleCT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 #
décembre 14, 2016 7:21   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en1111111111111″ UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81
décembre 14, 2016 7:21   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en1111111111111″ UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81
décembre 14, 2016 7:21   185.5.53.22 (Lithuania)     Blocked for SQL Injection in query string: lang=en1111111111111″ UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81

Maintenant il va falloir que je regarde les logs d’Apache afin de voir si je retrouve ses attaques. Et voir aussi si ce ne sont pas des « pompiers pyromanes », c’est à dire que les attaques ne soient pas nouvelles.

A noter aussi la méthode d’attaque, on fait de l’injection à partir de la variable lang. Pas bon de mettre la variable lang en php, ou alors il faut faire un traitement simple afin de bien vérifier que la taille de la valeur n’est pas supérieure à 2.

Deux jours après l’avertissement de Wordfence, j’ai donc un nouvel avertissement (Le 16/12/2016).

[WordPress Security] Huge Increase in Brute Force Attacks in December – What to Do

During the past three weeks, we have been monitoring a steady increase in brute force attacks. The last few days have seen a rapid increase in the number of attackers.
 
This morning we have published the charts showing these changes and we identify some of the attackers. We also share data on which hosting provider networks are the largest sources of attacks.

Quand on analyse les paramètres du leur SPAM : utm_source=list&utm_campaign=121616&utm_medium=email . En gros ils ont fait 121616 emails … On se demande presque si le remède n’est pas aussi mauvais que la maladie 😉 . J’ai donc du travail pour vérifier toute ses affirmations. Je vais donc partir sur les requêtes contenant les mots « UNION SELECT » sans faire attention à la casse. J’ai 3134 fichiers de logs qui vont du 14/03/2008 à aujourd’hui.

Transposh , le plugin WordPress qui consomme toute la base de donnée !

La taille de la base de donnée est limité à 1000 Mo chez PHPNET.ORG, et je viens de voir que ce blog consomme près de 500 Mo. Après une analyse dans les tables de MySQL via la commande :

SELECT table_name AS « Tables », ROUND( (
(data_length + index_length) /1024 /1024 ) , 2) AS « Taille MB »
FROM information_schema.TABLES
WHERE table_schema = « NomDeLaBase »

Et je viens de m’apercevoir que ce sont les tables wp_translations_log et wp_translations qui occupent 50% de l’espace. Ces deux tables sont du plugin « Transposh Translation Filter » (Version 0.9.6 | Par Team Transposh) qui est désactivé … Encore un super plugin !

Je vais donc le supprimer, ce plugin n’a jamais réellement fonctionné !

La désinstallation n’a même pas supprimé les deux tables. Pour ne pas prendre de risque je les vide simplement :

  • DELETE FROM `wp_translations`;
    • 268972 lignes supprimées. (Traitement en 0.0085 sec)
  • DELETE FROM `wp_translations_log` ;
    • 520199 lignes supprimées. (Traitement en 0.0547 sec)

J’ai donc gagné 250 Mo … le module Transposh Translation Filter est à fuir !

Pinterest … création d’un compte.

Dernièrement j’ai pu voir le grand nombre d’utilisateur du Pinterest, j’ai donc voulu tester avec la création d’un compte : CYBERNEURONES.

Il faut ajouter un méta pour l’authentification du site :

<meta name= »p:domain_verify » content= »e25f9d4c6160495dda375ad0d3ee6804″/>

Ensuite on a la création d’un lien : https://fr.pinterest.com/cyberneurones/ . Maintenant il va falloir mettre en avant quelques articles afin de voir si réellement il y a du passage. Je vais choisir les articles qui ont le plus de visite.

Remplacer la courroie d’accessoires sur une Peugeot 307 🙁 20 624
Changement écran (Vitre) tactile sur un Alcatel OneTouch Idol 3 (4.7) 🙁 17 409
Vidange de la Peugeot 406 HDI 🙁 12 199
Changement de l’alternateur sur une Peugeot 406 🙁 8 735
Peugeot 307 : défaut sur le klaxon, mauvaise connectique . 🙁 8 464
Changer l’alternateur sur une Peugeot 307 essence 🙁 7 931
Peugeot 307 : la voiture ne démarre plus … comment faire le diag ? 🙁 7 453
Remplacement biellette stabilisatrice avant sur une Peugeot 406 🙁 7 172
Changement leve vitre electrique sur peugeot 406 🙁 5 568
Digiposte : un bon service mais perfectible 🙁 4 287
A quel âge peut on avoir une adresse email ? 🙁 3 288
Vélo à San Remo 🙂 2 761
OOPad : non merci ! 🙁 2 621
ASUS Zenfone : comment supprimer whoscall 🙁 1 962
Véolia : pénalité en cas de retard de paiement de l’eau sur Biot. 🙁 1 825
Mud Day : Pays d’Aix 🙂 1 581
Remplacement des biellettes de la barre stabilisatrice avant de la Peugeot 307 🙁 1 374
Peugeot 307 : Comment changer la batterie ? 🙁 1 218
Escroquerie sur les sites paradisdiscount.com et docteur-gsm.com permisse par hipay.com 🙁 1 215
Spartan Race Le Castellet : La Trifecta dans le Weekend 🙂 1 167

J’ai que trois articles qui correspondent, les articles de Mécaniques ne sont pas fait pour ce site. La mécaniques c’est plutôt du tuning de voitures pour ce site. Il est vrai que l’on subit plus la mécanique 😉 . Je vais descendre un peu plus bas des les statistiques afin de mettre au moins 5 articles.

Tour du Lac ( ou barrage ) des Cammazes ( dans le Tarn ) 🙂 194
La Capelette de Saint-Ferréol à Dourgne ( dans le Tarn ) 🙂 190

Et je vais finir par un article qui n’a jamais eu de visite, afin de bien tracer les nouvelles visites :

VTT : Parc Naturel de las Bardenas Reales : Boucle de 28 km 🙂 3

Si je regarde les statistiques de visite en fonction des réseaux sociaux :

Facebook 554
Twitter 141
Google+ 55
linkedin.com 1

C’est le vide … et Instagram c’est 0, pourtant j’avais mis en place un compte en mai 2016.

On va voir quel va être le retour …