Fuzz-testaus libFuzzerilla
Löydä reunatapauksissa ilmeneviä kaatumisia fuzz-testaamalla koodia libFuzzerilla.
Fuzz-testaus libFuzzerilla on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Miksi fuzzata?
Fuzzing tuottaa satunnaisia syötteitä löytääkseen kaatumisia, jumiutumisia ja tietoturvavirheitä. Modernit fuzzing-työkalut käyttävät kattavuuspalautetta ja muokkaavat syötteitä tutkiakseen uusia koodipolkuja.
libFuzzer
libFuzzer kuuluu LLVM:ään ja integroituu sanitizereihin. Kirjoittakaa yksi funktio, joka fuzzkaa yhtä sisääntulopistettä; kehys huolehtii syötteiden tuottamisesta.
Fuzz-kohteen kirjoittaminen
Allekirjoitus on kiinteä: ottakaa vastaan tavutaulukko ja palauttakaa 0.
#include <cstdint>
#include <cstddef>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
parse_input(reinterpret_cast<const char*>(data), size);
return 0;
}Kääntäminen libFuzzeria varten
Käyttäkää Clangia yhdessä valitsimien -fsanitize=fuzzer,address kanssa. Linkittäkää suoraan — main-funktiota ei tarvita.
clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_targetKattavuusohjattu muokkaus
libFuzzer seuraa, mitä koodipolkuja kukin syöte suorittaa. Se muokkaa lupaavia syötteitä tutkiakseen syvempiä polkuja — tämä on paljon tehokkaampaa kuin sokkona tuotetut satunnaissyötteet.
Korpus
Alustakaa fuzzer tunnettuja kiinnostavia syötteitä sisältävällä hakemistolla. Fuzzer tuottaa uusia syötteitä muokkaamalla niitä.
./fuzz_target corpus/Sanakirjatiedostot
Tarjotkaa yleisten tunnisteiden sanakirja, jotta kieliopillisten syötteiden, kuten HTML:n, JSONin ja protokollaviestien, tutkiminen nopeutuu.
Yhdistäkää sanitizerit
AddressSanitizerin alla ajaminen muuttaa hiljaiset muistivirheet välittömiksi kaatumisiksi, jotka fuzzer voi havaita.
Suorituskyky
Yksi ydin voi suorittaa pienillä kohteilla kymmeniä tuhansia ajoja sekunnissa. Ajattakaa fuzzingia tuntien tai päivien ajan ja antakaa sen toimia CI:n taustalla.
Kaatumisten toistaminen
Kun libFuzzer löytää kaatumisen, se tallentaa syötteen levylle. Voitte toistaa ajon myöhemmin virheen selvittämistä varten.
./fuzz_target crash-abc123OSS-Fuzz
Googlen OSS-Fuzz suorittaa avoimen lähdekoodin projektien fuzzereita jatkuvasti ja raportoi virheistä. Monet tunnetut kirjastot on integroitu siihen.
AFL ja Honggfuzz
Muitakin fuzzereita on olemassa:
- AFL/AFL++ — prosessipohjainen, fork-palvelimen nopeutukset
- Honggfuzz — tukee verkkoprotokollia
libFuzzer on helpoin tapa integroida fuzzing C++-projektiin.
Milloin fuzzata
Fuzzatkaa kaikkea koodia, joka käsittelee epäluotettavaa syötettä:
- jäsentimet (JSON, XML, protobuf)
- dekooderit (kuva, ääni, video)
- verkkoprotokollien käsittelijät
- kaikki ulkoista dataa lukeva koodi
Pikatarkistus
Miksi kattavuusohjattu fuzzing on tehokkaampaa kuin täysin satunnainen fuzzing?
Kertaus
libFuzzer on Clangiin integroitu kattavuusohjattu fuzzer. Kirjoittakaa pieni LLVMFuzzerTestOneInput-sisääntulo, kääntäkää asetuksella -fsanitize=fuzzer,address ja antakaa sen etsiä kaatumisia. Yhdistäkää se sanitizereihin ja korpuksiin; fuzzatkaa kaikkea epäluotettavaa syötettä käsittelevää koodia.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Fuzz-testaus libFuzzerilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Fuzz-testaus libFuzzerilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Fuzz-testaus libFuzzerilla”?
Löydä reunatapauksissa ilmeneviä kaatumisia fuzz-testaamalla koodia libFuzzerilla. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Fuzz-testaus libFuzzerilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Staattisen analyysin työkalut: clang-tidy, cppcheck
- Sanitizerit: Address, Thread, UB Sanitizer
- Fuzz-testaus libFuzzerilla
- Jatkuva integraatio C++-projekteille