Masterand al facultății de Automatică și Calculatoare, în cadrul programului “Sisteme Avansate de Securitate” / “Advanced Cybersecurity”. Lucrez în cercetare, pe partea de software security & reverse engineering și țin laboratoare pentru “Introducere în Securitatea Calculatoarelor”.
Contact: dan@codingvision.net
Generator de imagini OCR-proof
Descrierea proiectului
Proiectul actual, aflat la nivel de proof-of-concept, are rolul de a evidentia vulnerabilitatea serviciilor de recunoastere a textului din imagini, bazate pe invatare automata. Mecanismul de functionare este unul ghidat de o metoda evolutiva ce incearca sa creeze artefacte in imaginea respectiva astfel incat eroarea sistemului de recunoastere de caractere sa fie maxima iar in acelasi timp lizibilitatea sa nu fie afectata. Scopul final este de a permite modificarea unor imagini existente astfel incat textul sa fie lizibil doar pentru om.
Utilitatea acestui proiect poate fi justificata in urmatoarele cazuri:
- Generarea de imagini CAPTCHA cu text, cu factor de lizibilitate crescut
- Impiedicarea serviciilor de a extrage in mod automat informatii din poze pentru diverse scopuri (e.g..: clasificare, achizitii ulterioare de date folosind procesare de limbaj natural, etc.).
- Evaluarea performantei unui sistem de recunoastere a textului din imagini
Caracterul inovativ este dat in primul rand de idee si de modul de aplicare a zgomotului. Majoritatea programelor ce realizeaza astfel de actiuni folosesc metode bazate pe minimizarea functiei de eroare prin scaderea gradientului, lucru ce va implica, in final, informatii detaliate despre modelul folosit pentru recunoasterea caracterelor (i.e.: un scenariu grey-box sau white-box). Proiectul actual reuseste sa obtina rezultate intr-un context black-box – mai exact, fara informatii legate de modelul ce face recunoasterea – tinand cont doar de rezultatul intors.
Din punct de vedere tehnic, proiectul se bazeaza pe un algoritm genetic paralelizat, scris in C# si ulterior adaptat cerintelor actuale. Momentan poate interfata cu sistemul de recunoastere a caracterelor numit Tesseract (testat pe versiunea 4.0), prin intermediul unui wrapper provenit din framework-ul EmguCV, si cu serviciul expus online de platforma Google Cloud Vision. Functia de scor se bazeaza pe cantitatea de zgomot adaugata si pe patratul distantei Levenshtein dintre textul original (corect) si cel intors de sistemul de recunoastere. Functia de crossover urmareste un model statistic ce acorda prioritate artefactelor provenite din imagini cu scor mai bun. Diverse optimizari au fost aplicate pentru a reduce spatiul de cautare si a adauga zgomot doar in zonele de interes. De asemenea, exista abordari diferite in cazul imaginilor cu text de dimensiuni mici deoarece numarul de pixeli ce intra in componenta caracterului este scazut si asta cauzeaza implicit pierderi rapide ale lizibilitatii chiar si in cazul unei cantitati foarte mici de zgomot – spre deosebire de cele cu font mare ce pot accepta artefacte mai variate.
Mai jos, se poate observa programul in momentul in care incearca sa modifice o imagine si efectul zgomotului adaugat – primul cuvant nu este recunoscut de Tesseract.
Una dintre abordari implica exploatarea unei vulnerabilitati in algoritmul de segmentare a randurilor textului, astfel incat uneori programul ajunge sa faca citiri “oblice” si sa uneasca 2 randuri succesive intr-o singura “propozitie”. Un astfel de exemplu este ilustrat in figura de mai jos.
Rezultat intors de serviciul cloud.google.com/vision
Observatii: Mecanismul de segmentare (ilustrat prin chenarele verzi) ajunge sa recunoasca gresit randurile de text in urma adaugarii unei cantitati relativ mici de zgomot.
Performanta algoritmului a fost evaluata din punct de vedere al efectului obtinut asupra programelor de recunoastere a caracterelor si din punct de vedere al lizibilitatii. Pentru a ilustra eficienta zgomotului adaugat, au fost comparate multiple imagini ce contin zgomot aleator, conform unei distributii uniforme, in procentaj de 15%, cu imaginile generate de programul prezentat – a caror densitate de zgomot nu depaseste 7% (considerand doar regiunea de interes, ce contine text). Eficienta zgomotului tine cont de mai multi parametri, inclusiv cantitatea de zgomot si distanta Levenshtein obtinuta – rezultatele indica faptul ca eficienta metodei utilizate creste o data cu dimensiunea fontului.
Pentru a determina lizibilitatea textelor obtinute, am agregat rezultatele obtinute de la 114 participanti carora le-au fost prezentate 5 tipuri de imagini: cu zgomot aleator in proportie de 0%, 5%, 10%, 15% si imaginea generata de algoritmul propus. Acestia au fost rugati sa sorteze imaginile in functie de lizibilitate. Rezultatele se pot observa in graficul urmator, ce ilustreaza faptul ca imaginea generata (in grafic denumita Cyclops) este considerata mai lizibila decat cele cu zgomot adaugat in mod aleator insa nu poate concura cu versiunea originala (fara zgomot).
Posibilele implementari ulterioare se vor concentra asupra optimizarii metodei curente de lucru: generalizare a atacului, testarea unor atacuri la nivel de preprocesare a imaginii (mai exact, inducerea in eroare a algoritmului de binarizare) precum si a unor noi modele de artefacte, reducerea nivelului de zgomot, imbunatatirea timpului de executie.
Momentan proiectul si-a atins scopul original si nu se mai afla in etapa de dezvoltare.