Virusul pentru linux

IoT este o tendință foarte recentă. Aproape peste tot folosește kernel-ul Linux. Cu toate acestea, articolele despre scrierea de virusi și codificarea shell-ului pentru această platformă sunt relativ mici. Credeți că scrierea codului shell sub Linux este doar pentru cele selectate? Să vedem cum să scriem un virus pentru Linux!







Virusul pentru linux

Baza pentru scrierea unui virus pentru LINUX

Ce ai nevoie să lucrezi?

Pentru a compila codul shell, avem nevoie de un compilator și un linker. Vom folosi nasm și ld. Pentru a testa munca codului shell, vom scrie un mic program în C. Pentru al compila, avem nevoie de gcc. Pentru unele verificări, va fi necesară rasm2 (parte a cadrului radare2). Vom folosi Python pentru a scrie funcții helper.

Ce este nou în x64?

Mai precis, toate cele 32 de biți registrele de uz general sunt salvate, adăugate la versiunile lor extinse (Rax, RBX, RCX, RDX, rsi, RDI, PFR, DSR) și câteva noi registre de uz general (r8, r9, r10, r11 , r12, r13, r14, r15).

Apare o nouă convenție de apel (spre deosebire de arhitectura x86, este doar una). Potrivit lui, atunci când se numește o funcție, fiecare registru este folosit în anumite scopuri, și anume:







Syscall. Ce? Cum? De ce?

Syscall este modul în care modul de utilizare interacționează cu kernelul din Linux. Este folosit pentru diverse sarcini: operații I / O, scriere și citire fișiere, deschiderea și închiderea programelor, lucrul cu memoria și rețeaua și așa mai departe. Pentru a executa syscall. aveți nevoie de:

• încărcați numărul corespunzător al funcției în registrul rax;
• încărcarea parametrilor de intrare în alte registre;
• apelați întreruperea la numărul 0x80 (începând cu versiunea de kernel 2.6, aceasta se face prin intermediul apelului syscall).

Numerele funcțiilor de sistem necesare pot fi găsite, de exemplu, aici.

După cum puteți vedea, apăsarea codului 0x00 se va compila la următorii octeți 6a 00. Dacă am folosi un astfel de cod, codul nostru shell nu ar funcționa. Funcția va copia tot ceea ce este înainte de byte cu o valoare de 0x00.

Asta pare a fi tot.

FACEȚI-L!

Dacă ați citit acest lucru departe, ar trebui să existe o imagine a modului în care va funcționa codul nostru shell.

Primul pas este pregătirea parametrilor pentru funcția execve () și apoi poziționarea corectă a acestora pe stivă. Funcția va arăta astfel:


Al doilea parametru este o matrice de argv []. Primul element al acestei matrice conține calea către fișierul executabil.

Al treilea parametru este informații despre mediu, nu avem nevoie de el, deci va fi nul.

În primul rând, obținem un octet nul. Nu putem folosi o structura a formului mov eax, 0x00, deoarece aceasta va duce la null-bytes in cod, deci vom folosi urmatoarea declaratie:

Lăsați această valoare în registrul rdx - va fi totuși necesar ca caracter de la sfârșitul liniei și valoarea celui de-al treilea parametru (care va fi nul).

Pentru a răsturna linia și ao transforma în hex. puteți utiliza următoarea funcție în Python:


Apelați această funcție pentru /bin/sh:>>>rev.rev_str("/bin/sh)







Articole similare

Trimiteți-le prietenilor: