Anthropic julkaisi torstaina 22. lokakuuta tutkimuksen, jonka luvut ovat 239 ohjelman sisääntulokohtaa, 123 avoimen lähdekoodin kirjastoa ja satoja vuosia piilossa olleita bugeja. Tällä kertaa Claude-tekoäly ei etsinyt tietoturva-aukkoja tavalliseen tapaan, vaan yritti todistaa matemaattisesti, ettei tietynlaisia muistivirheitä ole.
Työn teki Anthropicin Frontier Red Team -ryhmä yhdessä Theorem-yhtiön kanssa. Kirjastot ovat Googlen OSS-Fuzz-hankkeesta. Se testaa tärkeimpiä avoimen lähdekoodin ohjelmia jatkuvasti syöttämällä niille satunnaista dataa. Anthropicin mukaan Claude löysi virheitä, jotka olivat jääneet huomaamatta vuosia ”biljoonista testiajoista huolimatta”.
Tällä viikolla AI Suomi on kertonut, miten tekoälyn avulla löydetyt PHP-aukot päätyivät hyökkääjien käsiin ja miksi Anthropicin tietoturvajohtaja pitää tilannetta vasta alkuna. Uusi tutkimus tarkastelee samaa ongelmaa puolustajan puolelta.
Testaus etsii, todiste kattaa kaiken
Tavallinen ohjelmistotestaus muistuttaa sillan koeponnistusta: sen yli ajetaan tuhansia rekkoja, ja jos yksikään ei putoa, silta on luultavasti kunnossa. Formaali verifiointi vastaa lujuuslaskelmaa. Se osoittaa, että silta kestää minkä tahansa sallitun kuorman.
Tässä kokeessa sallittu kuorma oli mikä tahansa alle 64 megatavun syöte. Claude kirjoitti jokaiselle sisääntulokohdalle todisteen siitä, ettei ohjelma kaadu muistivirheeseen millään tällaisella syötteellä. Todisteet tarkisti Rocq, aiemmin Coq-nimellä tunnettu todistusavustaja, joka hyväksyy vain aukottoman päättelyn. Jos tekoäly oikaisee, Rocq hylkää todisteen.
Todisteet koskevat käännettyä konekoodia eivätkä ohjelmoijan kirjoittamaa lähdekoodia. Tyypillinen todiste on noin 600 000 riviä, ja muutamassa viikossa niitä kertyi yhteensä noin 180 miljoonaa riviä. Ihminen ei sellaista lue. Siksi luottamus nojaa mekaaniseen tarkistimeen ja siihen, että tutkittava ominaisuus on määritelty oikein.
Bugit piiloutuivat suurten syötteiden taakse
Kun todiste ei mennyt läpi, syynä oli usein oikea virhe koodissa. Tutkimuksessa mainitaan esimerkiksi pakatun datan purkajan laskuri, joka saattoi pyörähtää nollan alapuolelle ja kirjoittaa muistiin väärään paikkaan. Se tapahtui vain noin 20 megatavun syötteellä, jonka rakenne oli harvinainen. Erään kuvadekooderin virhe vaati 64 megatavun syötteen ja yli kaksi gigatavua muistia.
Sumutustestaajat eli fuzzerit eivät tällaisia juuri tavoita. Anthropicin mukaan ne muuntelevat pieniä syötteitä, joiden koko on yleensä rajattu yhteen megatavuun.
Yksi löydöistä oli ennestään tuttu. Claude löysi uudelleen XML-tiedostoja lukevan libexpat-kirjaston haavoittuvuuden CVE-2026-56132, jonka laukaiseminen vaati syvälle sisäkkäistä syötettä. Libexpatin muutoslokin mukaan kyse oli muistin ylikirjoituksesta doProlog-funktiossa, ja aukko korjattiin 25. kesäkuuta julkaistussa versiossa 2.8.2. Aukko ei siis ole uusi, mutta löytö osoittaa, että menetelmä tavoittaa todellisia haavoittuvuuksia.
“”Formaalisti verifioitu” ei tarkoita ”virheetöntä”.”
Näkymätön pohjakerros suomalaisissakin palveluissa
Tavallinen käyttäjä ei näe zlibin tai libexpatin kaltaisia kirjastoja, mutta niitä on lähes kaikkialla. Zlib pakkaa dataa verkkoliikenteessä, tiedostomuodoissa ja käyttöjärjestelmissä. Libexpat lukee XML:ää esimerkiksi Pythonin ja monen palvelinohjelman sisällä. Samaa koodia pyörii käytännössä myös suomalaisten pankkien ja verkkokauppojen taustajärjestelmissä sekä kotien reitittimissä.
Kun peruskirjastosta löytyy aukko, korjauksen on kuljettava ylläpitäjältä ohjelmistotoimittajille ja laitevalmistajille ennen kuin se päätyy käyttäjän laitteeseen. Tällä viikolla PHP-päivitysten kanssa kiirehtineet ylläpitäjät tietävät, mitä jälkikäteinen paikkaaminen maksaa. Jos tietty virhetyyppi voidaan sulkea pois jo etukäteen, ketju lyhenee.
Zlibille tehtiin myös oma koe. Siinä Claude todisti, että Linux-ytimen zlib-toteutus noudattaa pakkausformaatin standardia RFC 1950. Saman kokeen toisinto noin puolelle tusinalle muulle laajalti käytetylle kirjastolle löysi Anthropicin mukaan vain pieniä, hyödyntämiskelvottomia reunatapausbugeja.
Valmistajan omat luvut
Tutkimus on Anthropicin oma, eikä sen tuloksia ole tarkistettu riippumattomasti. Yhtiö ei kerro, montako bugia ”satoja” tarkalleen tarkoittaa, eikä erittele niiden vakavuutta. Riippumatonta asiantuntija-arviota tutkimuksesta ei ollut saatavilla tätä juttua julkaistaessa. Anthropicin liitteessä on asiantuntijan kommentti todisteista, mutta sekin on yhtiön itse julkaisema.
Rajoitukset on kirjattu tutkimukseen itseensä. Todisteet koskevat RISC-V-suorittimelle käännettyjä, staattisesti linkitettyjä ohjelmia, vaikka valtaosa palvelimista ja puhelimista käyttää x86- tai ARM-suorittimia ja eri C-kirjastoa. Muistivirheet tunnistava AddressSanitizer-työkalu ei havaitse kaikkia virheitä, eikä jokaista sisääntulokohtaa todistettu.
Hintakin on kova. Yksittäinen todiste voi vaatia satoja miljoonia tokeneita eli tekoälyn käsittelemiä tekstin palasia. Anthropicin mukaan uusin Opus 5.5 ratkaisi puolet 36 pienestä testitehtävästä noin 40 prosenttia pienemmällä tokenimäärällä kuin Opus 5.



