Лов на файлове! Как да откраднете потребителски данни на macOS с един документ

потребителски

файлове

Xakep #240. Гидра

потребителски

Xakep #239. Отворете и проучете

откраднете

Xakep #238. Забравен Android

файлове

Xakep #237. Darknet 2018

потребителски

потребителски

Съдържанието на статията

В общи линии атаката работи по следния начин.

  1. Потребителят отваря HTML страница в браузър.
  2. Браузърът чете списъка с файлове, налични на компютъра на потребителя.
  3. Браузърът чете „важни“ файлове и ги качва на отдалечения сървър на нападателя. В същото време целият процес остава невидим за потребителя.

Разделяме атаката условно на два етапа:

  • получаване на информация за файловете на отдалечен компютър;
  • четене и изпращане до нашия сървър.

На първия етап трябва по някакъв начин да открием списъка с интересуващи ни файлове на компютъра на потребителя. Проблемът е, че няма ясен начин за това. Никой браузър няма да ви позволи да четете локалната директория от HTML страница

/ и списък с файлове на работния плот.

Мушкане на случаен принцип - също не е опция: да, знаем няколко "важни" пътя като

/.ssh/id_rsa, но в повечето случаи файловата система на потребителя, който отваря нашата „зла“ страница, е тъмна гора.

На втория етап, разполагайки с пълен набор от пътища, трябва по някакъв начин да излезем извън границите на пясъчника на браузъра, да прочетем локални файлове и да ги качим на нашия сървър.

Извличане на списък с файлове

.DS_Store съдържа визуализации на изображения (като скрития файл Thumbs.db в Windows), но за разлика от Windows, съдържа също имена на файлове и директории. Достатъчно е да влезете в директорията с файловете и операционната система веднага ще създаде .DS_Store.

Сервизният файл .DS_Store се създава автоматично вдиректория, когато влезете в нея

Xakep #240. Гидра

Какво е забележителното в това? И фактът, че .DS_Store може да бъде анализиран и да получи имената на всички файлове в директорията. За това е подходящ модулът DSStore със същото име за Python. Ето примерен код, който реализира четене .DS_Store:

Нека запазим този код във файла parse_ds_store.py и го стартираме. В моя случай резултатът от работата изглежда така:

какво виждаме И виждаме имената на файловете и папките в началната директория. Познавайки ги, можете да получите достъп до всяка следваща директория, да потърсите там .DS_Store и така да получите йерархия от файлове и папки, без да имате достъп до списък с директории.

Например анализираме домашната папка (

/.DS_Store), получаваме съдържание като това:

На следващата итерация

  • трябва да знаете потребителското име в системата;
  • файлът .DS_Store се създава само там, където потребителят влезе.

Всичко друго работи отлично. Сега слушайте по-нататък.

Предсказване на пътища за чувствителни файлове

Какво друго е ценно за потребителя? На първо място, .ssh директорията, където обикновено се изхвърлят частните ключове.

Нека започнем със следните пътища:

И .bash_history - историята на командите, въведени в терминала, все още не е притеснявала никого!

Ще има и бисквитки от Twitter, Skype и други приложения.

Нека също да заснемем данни за HSTS - има посетени сайтове, които върнаха HSTS заглавката. Няма да е излишно!

Е, не само Safari, обикновено различни файлове и конфигурации на инсталирания софтуер са на път

Ще вземем само файлове на Chrome:

И изведнъж се ровите наоколо къде се съхраняват интересни файлове на някои FTP / SQL клиенти или историята на съобщенията на месинджърите. 🙂

Получаване на пълни пътища допотребителски файлове

Вече сме измислили какво да вземем с нас. Сега нека се опитаме да съберем тези файлове с помощта на Safari.

Въпреки това, ако HTML не е изтеглен от интернет, Safari е по-толерантен към този вид заявка - като изпратим заявка към локален файл с помощта на XHR, ще получим съдържанието му:

потребителски
...но ако файлът е локален, тогава можете!

Благодарение на тази функция, знаейки пълния път до файла, можем да изтеглим съдържанието му и да го изпратим на отдалечен сървър!

Но тук е проблемът - как да получим пълния път, ако не знаем потребителското име? Но в /etc/passwd изобщо няма потребителски вход (проверих, да)!

За да разберем потребителското име, проверяваме два лог файла, които се появяват веднага щом инсталирате и конфигурирате операционната система (специални благодарности на @f1nnix). Това са /var/log/system.log и /var/log/install.log файлове. Няма да е в един - най-вероятно ще бъде в друг. Зареждаме тези файлове в браузъра и използваме регулярен израз, за ​​да получим потребителското име.

Ето JS функция за извличане на потребителско име от лог файлове:

Изпращане на файлове към сървъра

Можете да опитате да направите черни и бели списъци, например, за да не изтегляте тежки филми или, напротив, да изтегляте само .docx файлове. 🙂

Но какво ще стане, ако в системата са инсталирани други браузъри? HTML ще бъде отворен с Chrome или FF и нищо няма да се случи.

За щастие има няколко разширения, които се отварят само в Safari. Това са XHTM и webarchive. Ако с XHTM всичко е ясно - това е уеб страница, базирана на XML (и можете да изпълнявате JS в нея), тогава с webarchive е малко по-сложно. Има два формата, единият от които може лесно да се изработи на ръка:

където данните са страница в Base64 с 59 знака на ред.

Начини за заобикаляне на ограниченията на флага Whereот

По подразбиране за файлове, прехвърляни през мрежата, има ограничение за изпълнението на такъв код.

откраднете
Защитата е задействана

Това означава, че ако просто изпратите файла по пощата, той може да не работи.

Добрата новина е, че не всички програми поставят флага при изтегляне на файл. Например версията на Telegram за macOS не го прави. В редица тестове успяхме да прочетем файловете на потребителя със „зловреден“ XHTM файл, прехвърлен през настолната версия на Telegram за macOS и без архивиране и защита с парола.

потребителски
PoC, предаван чрез Telegram Desktop, проработи!

Със сигурност можете да намерите и други примери. И разбира се, готовият файл може да бъде подхлъзнат на жертвата на физически носител по време на социотехническо тестване.

Можете да намерите готовия сървър, както и два вида HTML файл с полезния товар в моето хранилище.

В момента няма защита срещу тази атака. Мога само да ви посъветвам да гледате какво отваряте, като изтегляте от интернет, и ако е възможно, не използвайте браузъра Safari. Apple очевидно не смята този проблем за уязвимост и нищо не е чуто за корекция на този етап. Така че използвай тази сила мъдро, Люк!