dimhold.by
← Артыкулы

Сканер сакрэтаў знайшоў 2 сакрэты ў нататках і ніводнага ў расшыфроўцы Whisper той жа размовы

З таго часу як у верасні выйшаў Whisper, я праганяю праз яго запісы сваіх званкоў. Расшыфроўкі збіраюцца ў тэчцы побач з нататкамі. Відавочным месцам для іх быў рэпазіторый git са сканерам сакрэтаў у хуку на каміт, гэтак жа як абараняюць код. Потым я зразумеў, што не маю ўяўлення, што сканер бачыць у расшыфроўцы: я запускаў яго толькі на кодзе.

Таму я гэта вымераў, але без сваіх сапраўдных званкоў. Цягнуць сапраўдныя размовы ў тэст пра іх уцечку мне не хацелася.

Як я мераў

Я напісаў кароткую размову двух выдуманых людзей, 12 рэплік. У яе я заклаў 11 рэчаў, якія не павінны выйсці з пакоя: ключ доступу AWS, прачытаны па літарах, пароль ад базы на стэйджынгу, код ад дзвярэй офіса, код, які толькі што даслаў банк, тэлефон, email, нумар карткі, IBAN, адрас, хворую спіну калегі і заробак, пра які прасілі маўчаць. Імёнаў у ёй два, Anna і Marek.

Кожная рэпліка ёсць у двух варыянтах. Першы такі, як я набраў бы яе ў нататках падчас званка, напрыклад DB_PASSWORD=PurpleOtter1987. Другі такі, як яе вымавілі б: “the staging database password is still purple otter nineteen eighty seven”. Вусны варыянт я агучыў espeak-ng 1.51 двума наборамі галасоў. Першы гэта звычайныя галасы espeak, другі MBROLA us1 і us2, на мой слых яны гучаць менш механічна. Расшыфроўваў Whisper з рэпазіторыя ў стане на 9 снежня, мадэлі base і small на CPU, fp32, мова зададзена англійская. Атрымалася 4 расшыфроўкі адной размовы. Кожную рэпліку я сінтэзаваў і расшыфроўваў асобна, таму радок N расшыфроўкі гэта заўсёды рэпліка N.

Для сакрэтаў я прагнаў па кожным дакуменце сёлетнія версіі: gitleaks 8.15.2, trufflehog 3.21.0 і detect-secrets 1.4.0. Для асабістых даных я запусціў Microsoft Presidio 2.2.31 з мадэллю spaCy en_core_web_lg. Паўторны прагон Whisper даў тыя ж 2 расшыфроўкі MBROLA літара ў літару. У расшыфроўках espeak змяніліся 3 радкі, бо там Whisper пераходзіў на сэмплаванне: гэтыя 3 радкі дэкадуюцца пры тэмпературы 0,4 і вышэй. Ніводная клетка табліцы ніжэй ад гэтага не змянілася.

Нататкі

Тут інструменты зрабілі прыкладна тое, чаго я чакаў. gitleaks знайшоў ключ AWS па форме: AKIA і яшчэ 16 знакаў. Пароль ён знайшоў, бо той стаіць пасля PASSWORD= і яго энтрапія 3,51 ледзь перавышае парог правіла, 3,5. Так што крыху менш выпадковы пароль прайшоў бы. detect-secrets знайшоў толькі ключ. trufflehog не знайшоў нічога. Яго дэтэктару AWS патрэбны ідэнтыфікатар ключа разам з сакрэтам, а сакрэт на 40 знакаў у нататках падчас званка трапляецца рэдка. Presidio знайшоў тэлефон, email, картку, IBAN, горад і абодва імёны. Яшчэ ён вырашыў, што DE89 3704 0044 гэта чалавек.

Разам 7 з 11 пунктаў злавіў хоць адзін інструмент. Код ад дзвярэй, код ад банка, спіну і заробак не злавіў ніхто. Ні ў аднаго з гэтых 4 інструментаў няма правіла для чатырохзначнага ліку, які хтосьці назваў. Я не вельмі разумею, як такое правіла выглядала б.

Расшыфроўкі

На 4 расшыфроўках 3 сканеры сакрэтаў разам выдалі 0 знаходак.

Чаму так, відаць па радках. Whisper small на галасах MBROLA запісаў ключ як a KQX7 or HM2 PLT-4WZ6NB. AKIA больш няма, так што рэгулярцы няма за што зачапіцца. Пароль стаў “purple under 1987”, пасля слова password няма =, таму агульнае правіла не спрацоўвае. Картка стала for 1111 1111 1111 1111 1111: першае “four” ператварылася ў прыназоўнік і з’явілася пятая група. Presidio правярае нумары картак алгарытмам Луна. Лічбы, што засталіся, праверку не праходзяць. Email стаў “hurrymail is in the dot calzcatexample.com”. Marek стаў “Merck” на галасах MBROLA і “America’s” на espeak. Presidio палічыў America геаграфічнай назвай. Anna ацалела адзін раз, унутры зламанага радка з email: espeak з small запісаў “Anna.Kaul’s cat example.com”. Толькі ў гэтай расшыфроўцы Presidio яе і знайшоў. У астатніх яна ператварылася ў “and”, “in a” ці знікла зусім. У расшыфроўцы MBROLA small Presidio замест яе знайшоў чалавека на імя “hurrymail”.

Я даволі доўга чытаў гэтыя радкі, перш чым убачыў заканамернасць. Я чакаў, што на расшыфроўках інструментам будзе цяжэй. Так і выйшла, але губляецца не абы-што.

нататкі набраныя espeak base espeak small MBROLA base MBROLA small сакрэты ключ AWS пароль базы код ад дзвярэй код ад банка асабістае тэлефон email картка IBAN адрас спіна калегі заробак значэнне чытаецца інструмент заўважыў
Whisper захоўвае кароткія лікі і простыя словы і ламае тое, у чаго ёсць форма. Адрас лічыцца заўважаным, калі Presidio знайшоў горад.

Whisper зламаў большую частку таго, што інструменты ўмеюць шукаць, бо ў такіх пунктаў ёсць форма: прэфікс, кантрольная сума, @. Тэлефон таксама ацалеў, але толькі на галасах MBROLA. Ва ўсіх расшыфроўках ацалелі код ад дзвярэй, код ад банка, спіна і заробак, гэта значыць якраз тое, чаго ніводзін інструмент не злавіў ні ў адным дакуменце. Гэта кароткія лікі і простыя словы. Whisper захоўвае лікі і сэнс, нават калі скажае словы вакол. У 1 расшыфроўцы радок пра дзверы стаў “The office norco is 4815”. У расшыфроўках MBROLA чытэльнымі засталіся 5 з 11 пунктаў. Presidio адзначыў 1 з гэтых 5, тэлефон, з ацэнкай 0,4. Яшчэ ён адзначыў Springfield з адраса, які ператварыўся ў “14 ohms street”.

сказана Whisper small, MBROLA што трэба інструменту A K I A Q X 7 R H M ... a KQX7 or HM2 PLT-4WZ6NB AKIA і яшчэ 16 знакаў не супала four one one one, ... for 1111 1111 1111 1111 1111 16 лічбаў, праверка Луна не супала four eight one five 4815 правіла няма чытаецца, не заўважаны
Тыя ж 3 рэплікі, галасы MBROLA, Whisper small. Інструменты шукаюць форму, а маўленне яе не захоўвае.

Скажоныя пункты па-ранейшаму чытаюцца кожным, хто ведае каманду: “Merck is up until Friday. The doctor says it is his back again.”

Што вяртае git rm

Другая палова рашэння даўно вядомая. Я праверыў, як паводзіць сябе git rm, у асноўным для таго, каб мець права сказаць, што праверыў. Я закаміціў расшыфроўку, наступным камітам выдаліў яе праз git rm і паглядзеў. git log -S'door' знаходзіць абодва каміты. Файл чытаецца праз HEAD~1 пасля git gc --prune=now. Свежы клон яго таксама мае, бо каміт, які яго дадаў, па-ранейшаму ў гісторыі. Каб прыбраць файл, трэба перапісаць гісторыю праз git filter-repo або BFG і спадзявацца, што ніхто не паспеў скланаваць. Старонка GitHub пра выдаленне канфідэнцыйных даных раіць тыя ж 2 інструменты і папярэджвае пра існыя клоны.

Так што расшыфроўкі не трапляюць ні ў адзін рэпазіторый. Тэчка ляжыць па-за ўсімі рэпазіторыямі. Сканер у хуку на каміт застаецца інструментам для кода.

Чаго я не правяраў

Гэта 1 выдуманая размова з сінтэтычнымі галасамі. У сапраўдных званках ёсць шум і акцэнты. Людзі перабіваюць адно аднаго. З жывым голасам Whisper, хутчэй за ўсё, лягчэй разбірае імёны. Я не спрабаваў мадэлі medium і large-v2, якія могуць аднавіць ключ AWS або email. Я не спрабаваў рускую. Presidio працаваў са стандартнымі распазнавальнікамі. Уласны шаблон для кодаў ад дзвярэй злавіў бы частку з іх, але, хутчэй за ўсё, злавіў бы і любы чатырохзначны лік у размове. І я не спрабаваў моўную мадэль у ролі дэтэктара. Яна, магчыма, зразумела б “she asked us not to tell the team”, але для гэтага ёй давялося б прачытаць расшыфроўку цалкам.