Spørgsmål:
Pakkere / beskyttere til Linux
user1743
2013-12-14 11:14:52 UTC
view on stackexchange narkive permalink

Jeg spekulerede på, om nogen var stødt på en pakke / beskytter, der kunne bruges til ELF-binærfiler. Der ser ud til at være en hel del artikler om skrivning af pakker og beskyttere til PE-formatet - der ser dog ikke ud til at være meget mange til Linux.

Dette er bare en hobby, og indtil videre har jeg er stødt på 1, som synes at være en meget grundlæggende (men pæn) introduktion til SMC.

Er der nogen ressourcer / kildekode, som du kunne pege mig på, at jeg kunne henvise og lære af?

Tre svar:
jvoisin
2013-12-15 01:12:33 UTC
view on stackexchange narkive permalink

Bortset fra classix UPX, skal du kigge på Burneye (med sine crackere, UNFburninhell og Burndump) og elfuck. De er temmelig gamle, men stadig interessante.

Hvis du er interesseret i tricks, der kan bruges, er dette en god introduktion af aczid, og jeg vil også anbefale Binære beskyttelsesordninger for en mere komplet oversigt.

Nogen præsenterede også en CanSecWest en pakker ved navn Shiva, der blev brudt på Blackhat. Desværre er der ingen kilder tilgængelige.

nogen opdatering på denne liste? Bortset fra UPX er de anførte virkelig gamle og vedligeholdes ikke.
Du er velkommen til at skrive din egen, hvis du er utålmodig;)
Desværre synes mange af linkene ovenfor ikke at virke længere.
Jason Geffner
2013-12-14 21:05:28 UTC
view on stackexchange narkive permalink

UPX er en open source -pakker, der fungerer på ELF-binære filer.

julian
2019-07-04 19:32:37 UTC
view on stackexchange narkive permalink

Klik på værktøjsnavne for at downloade. Nogle vil kun være kildekode, andre kun binære. Brug på egen risiko.


Der er 4 sektioner:

  1. eksperimentelle designs, der blev udviklet til at fremme den nyeste teknologi inden for ELF-binær beskyttelse eller til forskningsformål
  2. værktøjer, der er resultatet af personlige projekter eller skabt til sjov / som en hobby
  3. historisk relevante beskyttere, nu sprængte / forældede
  4. moderne beskyttere - de, der er kendt på tidspunktet for skrivning, der skal bruges i den "virkelige verden", så at sige (uden for den akademiske verden - f.eks. i malware).

Eksperimentel / Bevis for koncept

  • dacryfile (2001)

    phrack artikel: Armouring ELF: Binær kryptering på UNIX-platformen

    Dacryfile er en samling værktøjer, der implementerer følgende koncept. Værtsfilen er krypteret fra starten af ​​afsnittet .text til slutningen af ​​segmentet .text . Filen har nu sin objektkode og dens skrivebeskyttede data er beskyttet af kryptering, mens alle dens data og dynamiske objekter er åbne for inspektion. Værtsfilen injiceres med en parasit, der udfører runtime-dekryptering. Denne parasit kan være af vilkårlig størrelse, fordi den føjes til slutningen af ​​ .data -segmentet.

    "Parasitkode" henviser til kode, der er indsat i enten filen på disken eller procesbilledet i hukommelsen for at ændre programmets kørselsadfærd. Forskellige teknikker, der historisk blev brugt til at udføre denne type kodeindsættelse, diskuteres i Silvio Cesares artikel Unix Virus (1999)

    Mekanismen, hvormed parasitkoden blev vedhæftet ELF-binæren indeholdende den opnåede krypterede kode kaldes grugq for "subversiv dynamisk sammenkædning":

    Selve parasitten er temmelig enkel ved at bruge den subversive dynamik sammenkædning Linux-bibliotek for at få adgang til libc-funktioner og rc4 for at dekryptere værten.

    Denne teknik blev detaljeret beskrevet i hans artikel Cheating the ELF, hvori parasitkode skrevet til en dynamisk forbundet eksekverbar til er i stand til at foretage opkald til biblioteksfunktioner i det væsentlige ved at søge gennem procesens proc / self / maps -fil for glibc 's delte objektindlæsning og aflæsningsfunktioner for derefter at indlæse de interesserede biblioteker.


  • shiva 0.96 (2003) (kun binær (beskyttet))

    • Introduktion Præsentation
    • Nederlagspræsentation

      Implementerer følgende funktioner:

      • Ydre tilsløringslag for at forhindre statisk analyse
      • AES-krypteret, adgangskodebeskyttet mellemlag
      • Indre krypteret lag bestående af kryptblokke, der kan hukommelseskortes på forespørgsel
      • TRAP-flagregistrering for at forhindre enkelt-steping
      • gafler og derefter proc esses ptrace () hinanden, hvilket forhindrer PTRACE_ATTACH
      • springer i midten af ​​instruktionerne
      • fanger SIGTRAP
      • timingskontrol
      • INT3 instruktionsudskiftning

      Uden for disse præsentationer har det været svært at finde yderligere information udover en del diskussion i phrack artikler om ELF runtime-kryptering / dekryptering. Ingen kildekode er tilgængelig, kun den binære, der er beskyttet.


  • cryptexec (2005)

    phrack-artikel: cryptexec: Næste generations binær kryptering af runtime ved hjælp af on-demand-funktionen ekstraktion. Kildekoden er inkluderet i slutningen.

    Her udføres runtime-dekryptering gennem en kombination af en sporingsfunktion, der bruger en privat stak, en disassembler og kodeemulering til at læse blokke på 24 bytes læses, dekrypteres, adskilles og derefter emuleres. Dette sikrer, at der ikke findes mere end 24 byte med ikke-krypteret programkode i hukommelsen, mens de dekrypteres og udføres af den beskyttede kode.

    Sporingsrutinen opretholder to sammenhænge: den spores kontekst og sin egen kontekst. Konteksten består af 8 32-bit almindelige registre og flag. Andre registre ændres ikke af rutinen. Begge sammenhænge holdes på den private stak (som også bruges til at kalde C).

    Ideen er at hente en ad gangen instruktioner fra det sporede program og udføre dem naturligt. Intel instruktions sæt har ret uregelmæssig kodning, så XDE [5] demonteringsmotoren bruges til at finde både den virkelige opcode og den samlede instruktions længde. Under eksperimenter med FreeBSD (som bruger LOCK-præfikset MOV-instruktion i sin dynamiske loader) opdagede jeg en fejl i XDE, som er beskrevet og løst nedenfor.

    Vi opretholder vores egen EIP i traced_eip, rund den ned til næste lavere 8-byte grænse og derefter dekryptere 24 byte i vores egen buffer. Derefter finder adskillelsen sted, og kontrollen overføres til emuleringsrutiner via opcode-kontroltabellen. Alle instruktioner, undtagen kontroloverførsel, udføres indbygget (i sporet sammenhæng, der gendannes på passende tidspunkt). Efter udførelse af en enkelt instruktion returneres kontrollen til vores sporingsrutine.


  • CSPIM (2010)

    Også udviklet af Vrba (designeren af ​​den førnævnte cryptexec ) og præsenteret i papiret Programtydning ved stærk kryptografi (papiret er betalt væg, men koden er på github og Vrbas websted):

    ... vi præsenterer en programtørringsmetode, der er baseret på kombinationen af ​​stærk kryptering af kode og data og en CPU-simulator (CSPIM), der implementerer MIPS I-instruktionssættet. Vores metode er forskellig fra eksisterende metoder, idet kun et enkelt ord (32-bit) af den beskyttede kode eller data er til stede som almindelig tekst i hovedhukommelsen. Desuden tillader vores metode muligheden for eksternt at levere dekrypteringsnøglen til simulatoren.

    CSPIM

    Ovenstående diagram er fra Forbedringer til en virtuel maskinebaseret kodekrypter (ingen kode tilgængelig til dette papir så vidt jeg ved).


Personlige projekter

  • cryptelf (2003) af SLACKo

    Ændrer binær ved at tilføje kode til at håndtere runtime-dekryptering, ændre programindgangspunktet og ændre . note segment til LOAD . Krypterer .text sektionen ved at XORing bytes med en nøgle.


  • ELF Encrypter - Sidste opdatering : 2013-03-12

    Ser ud til at stole på klassisk runtime-kodeinjektion eller parasitkode-teknikker for at opnå runtime-dekryptering.

    Den krypterede fil (genereret af crypt-7lib-program ) dekrypteres ved kørsel af et delt bibliotek, direkte knyttet til det binære eller opført i LD_PRELOAD , under dets initialiseringsrutine. Pakken indeholder også programmer til at indsprøjte almindelig og krypteret kode i ELF-binære filer.

    ELF-Encrypter 0.12

    • ændrede datasegmentinfektionsteknikken
    • tilføjet koden for at korrigere sektionstabelforskydninger

  • ps2-pakker (2013)

    Baseret på UPX.

    Ligesom UPX er dette værktøj designet til at hjælpe dig med at oprette pakket ELF til at køre på PS2. Det har et modulært design, så alle kan skriv enhver form for modul til det. Det har faktisk et zlib-modul, et lzo-modul, tre ucl-moduler (n2b, n2d og n2e) og et null-modul, kun til demo-formål.


  • midgetpack (2014)

    Midgetpack indeholder to driftsformer: adgangskode og kurve25519 nøgleudveksling.

    Curve25519 er den virkelige fordel ved midgetpack. I denne tilstand giver du ikke adgangskode eller nøgle. I stedet genereres en nøglefil ved pakningstidspunktet. Denne nøglefil skal bruges hver gang du ønsker at bruge binærfilen. Når du starter binærprogrammet, vil det give en udfordring og forvente et svar. Du kopierer / indsætter udfordringen i input fra mpkex-værktøjet og modtager et svar, der indeholder den krypterede nøgle til binærprogrammet. Denne nøgleudveksling er beskyttet af Curve25519 nøgleudveksling, nøglen er krypteret med aes-128, og hele udvekslingen er godkendt med HMAC-SHA256 for at undgå generiske man-i-midten-angreb.


  • oplzkwp (2015)

    oplzkwp er et bibliotek til ELF-forvirring. Det bruger PRESENT og blake244 til at kryptere din nyttelast på farten. Kun de funktioner, der aktuelt udføres, dekrypteres i hukommelsen. Både Linux (x86) og Android (ARM) understøttes.


  • pocrypt (2015)

    Proof of Code for at demonstrere, hvordan man krypterer dele af en binær. Den modificerede binære fil udvides med en lille funktion, der dekrypterer de beskyttede dele af filen under kørsel for at muliggøre udførelse.



  • ELFcrypt (2018)

    Enkel ELF-krypter. Bruger RC4-kryptering.



Historisk

  • burneye (v1) af Teso-gruppen (2002)

    Følgende resumé er givet i cryptexec: Næste generation af runtime binær kryptering ved hjælp af on-demand-funktion ekstraktion (mere information er inkluderet i burneyes dokumentation):

    På samme måde som Shiva har den tre lag: 1) forvirring, 2) adgangskodebaseret kryptering ved hjælp af RC4 og SHA1 (til generering af nøglen fra adgangssætning) og 3) fingeraftrykslaget.

    fingeraftryklag er det mest interessante: data om målsystemet indsamles (f.eks. mængde hukommelse osv.) og gøres til en 'fingeraftryk'. Den eksekverbare kode er krypteret under hensyntagen til fingeraftrykket, så den resulterende binære kun kan køres på værten med det givne fingeraftryk. Der er to muligheder for fingeraftryk:

    • Fingeprint-tolerance kan angives, så små afvigelser er tilladt. På den måde kan hukommelsen for eksempel opgraderes på målsystemet, og den eksekverbare funktion fungerer stadig. Hvis antallet af forskelle i fingeraftrykket er for stort, fungerer programmet ikke.

    • Forsegling: programmet, der produceres med denne mulighed, kører på ethvert system. Men første gang det køres, skaber det et fingeraftryk af vært og 'forsegler' sig selv til den vært. Den originale segl binær slettes sikkert bagefter.

    Den krypterede binære kan også fås til at slette sig selv, når en bestemt miljøvariabel indstilles under programudførelsen.


  • objobf aka burneye2 (2003 )

    Den læser en ELF-flytbar objektfil og producerer en funktionel ækvivalent outputfil, som er en tilsløret version af inputfilen. For at gøre dette opdeler objobf alle funktioner i filen til det grundlæggende blokniveau. Denne repræsentation bruges til at mutere koden, mens den holdes semantisk ækvivalent. Dette involverer dataflowanalyse og grundlæggende bloktransformationer. Derefter lineariseres den grundlæggende blokrepræsentation som kontrolflowdiagram til en ny objektfil, der oprettes fra bunden.


  • elfuck

    Implementerer eksekverbar komprimering samt kryptering. Baseret på UPX og burneye.

    • ELFuck bruger fremragende Markus F.X.J. Oberhumers kompressionsalgoritme, NRV2E, der bærer meget god kompression med lille dekompressor (ca. 128 byte!). Denne algoritmefamilie er stjålet fra UPX, med forskel i, at dekompression sker i realtid; ELFuck dekomprimerer ELF direkte til .text / .data-segmentet og udfører autentisk ELF-billede derfra. På den anden side opretter UPX original ELF i / tmp og udfører () det, så vi slet ikke har brug for noget skrivbart filsystem.

    • Fordi ELFuck er 100% baseret på stjålne ideer, implementerede jeg også denne af BurnEye. Nogen vil muligvis ikke tillade andre brugere at bruge / analysere din binære (offentlige skaller, root browsing brugerens hjem). Algoritmen er ganske enkel, men synes at være temmelig effektiv: Vi vælger et kodeord; udvid det ved hjælp af sha1 til 160 bit nøgle. ved hjælp af denne nøgle krypterer vi ved hjælp af RC4-algoritme hele binære (undtagen den dekrypterende stub, selvfølgelig). Vi gemmer også de sidste 32 bit sha1 i forhold til den originale binære fil for at kontrollere adgangskoden. Når nogen udfører en sådan beskyttet binær; stubben beder om adgangskode, laver hash af den og prøver at dekryptere den binære ryg ved hjælp af denne nøgle. Derefter laver vi en hash af potentielt dekrypteret binær, kontrollerer den mod den værdi, vi har gemt under oprettelsen, og hvis matcher, dekrypteres binæren korrekt (= højre adgangskode), og vi lader den køre.

Moderne

De fleste moderne ELF-binære filer er beskyttet ved hjælp af UPX eller en variant deraf. 1,2





Yderligere oplysninger

En selvstændig taksonomi -modificeringskode til obfuscation (2011) opsummerer kortfattet nogle af disse værktøjer og diskuterer en række obfuscation-teknikker.

Referencer

  1. Forståelse af Linux Malware

  2. Modern Linux Malware Exposed

  3. Unboxing Linux / Mumblehard (2015) - ESET



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...