Що таке утиліта strace і як її можна використовувати для захисту ваших даних?

Зловмисники використовують різноманітні методи та техніки для злому систем і мереж. Використання вразливостей програмного забезпечення, brute-force атаки, phishing атаки (фішингові розсилки) або ж розповсюдження шкідливого програмного забезпечення (malware) для зараження робочих машин. Після отримання потенційного доступу до цільової машини, зловмисник переходить до наступної фази атаки – Постексплуатація (PosExploitation phase). Постексплуатація є важливою частиною кібератак, оскільки вона дозволяє зловмисникам здобути максимальну вигоду від вже скомпрометованої інфраструктури. Під час цієї фази, зловмисники запускають процес аналізу скомпрометованої системи для збору цінної інформації. Це включає в себе конфіденційні дані (наприклад особиста інформація), паролів, ключів доступу та іншої корисної інформації. Для цього можуть використовуватись легальні та вже встановлені утиліти, які знаходяться на цільовій машині жертви. Про одну з таких, ми й поговоримо сьогодні – strace.

strace – це утиліта в операційних системах на основі ядра Linux, яка використовується для відстеження викликів системи та сигналів, що відправляються до програми. Вона дозволяє нам аналізувати взаємодію програми з операційною системою на рівні системних викликів (інтерфейс між програмним забезпеченням та операційною системою).

Якщо утиліта не встановлена в системі, це можна виправити наступною командою:

  • sudo apt-get -y install strace

Після успішного виконання попередньої команди, можна перевірити версію strace вказуючи параметр -V:

  • strace -V
RNB Запис
Figure 1 – Версія strace

Утиліта успішно встановлена, та готова до роботи. Для того щоб розпочати роботу з нашою утилітою, потрібно вказати команду, системні виклики якої, ми хочемо відслідкувати. Спробуємо зробити це з відомою командою whoami – команда для відображення імені користувача операційної системи:

  • strace whoami
RNB Запис
Figure 2 Вивід команди strace whoami

Як бачимо, за кулісами, команда whoami не така проста, як здається. Ми отримали дуже багато інформації щодо цієї команди використовуючи strace. Деякі ключові виклики:

  • найперший системний виклик – execve. Він відповідає за виконання образу виконуваного файлу. В нашому випадку, це локація бінарника whoami (/usr/bin/whoami)
  • mmap – відображення файлу в пам’ять
  • access – перевірка прав користувача на файл

Бачимо, що strace надає доволі широку інформацію щодо виконання команд, та їх звернення до ядра.

Проте, цю утиліту взяли на озброєння і хакери, тому активно її застосовують на стадії пост-експлуатації цільової машини.

Один із цікавих векторів, що зацікавив нашу команду – це маніпуляція SSH сесією жертви.  SSH (Secure Shell) сесія – це захищений канал зв’язку між двома пристроями, який дозволяє здійснювати віддалений доступ та обмін даними між ними. Використання такої сесії вважається хорошою практикою кібербезпеки, так як вона забезпечує конфіденційність та цілісність передачі даних для сторін, що взаємодіють.

З допомогою утиліти strace ми можемо перехоплювати цю сесію на рівні системних викликів і читати всю інформацію, що передається. Спробуємо це. Варто відзначити, що для таких дій нам потрібні права root користувача.

Для початку роботи, нам потрібен запущений SSH сервера, та користувач, що буде підключатись. В нашому випадку це буде відбуватись на одній локальній машині, проте всі дії аналогічні реальним умовам (дві та більше машини в мережі).

Перевірити статус SSH сервісу можна наступною командою:

  • sudo service ssh status
RNB Запис
Figure 3 – Статус SSH сервісу

Якщо сервіс не запущений (як у нашому вападку), це можна виправити трохи змінивши попередню команду:

  • sudo service ssh start

Після цього бачимо, що сервіс активний, та ми маємо можливість підключатись через SSH до нашого сервера.

RNB Запис
Figure 4 – Активний SSH сервіс

Тепер спробуємо підключитись до користувача root локальної машини:

RNB Запис
Figure 5 – Підключення до root користувача через SSH

Використання утиліти strace у даному випадку дуже просте – нам потрібно знайти ідентифікатор процеса, який відповідає за SSH з’єднання та вказати його як параметр для даної утиліти. В свою чергу strace буде перебувати в циклі відслідковування всіх системних викликів для цього процесу, що дасть нам доступ до конфіденційної інформації.

Знайдемо PID з допомогою команди ps:

  • ps -auxwwww | grep sshd

RNB Запис

Тепер, маючи цю інформацію, ми можемо почати сніфінг SSH сесії:

  • sudo strace -p <PID>

RNB Запис

Спробуємо виконати деякі команди в SSH сесії та переглянути їх у виводі утиліти strace:

RNB Запис
Figure 6 – Виконання команд в SSH сесії

Помічаємо, що нам вдалось перехопити вивід обох команд у вільному, незашифрованому вигляді:

RNB Запис
Figure 7 – Перехоплення виводу команду “id”
RNB Запис
Figure 8 – Перехоплення вмісту файлу

Як бачимо, така поведінка є доволі небезпечною для жертви, так як дозволяє читати весь вивід виконуваних команд з SSH сесії.

Проте, нам цього мало і ми підемо далі, застосуючи трохи соціальної інженерії. Спробуємо відправити користувачу повідомлення про “негайне перезавантаження системи”, для того щоб виманити його пароль. Застосуємо для цього наступну команду:

  • echo -en “\r\nWARNING: System will reboot in 60 seconds.\r\nTo abort, enter your password: ” >>/dev/pts/<SESSION_ID>

де, замість SESSION_ID потрібно вставити ідентифікатор SSH сесії. Після цього перед користувачем з’ являється наше повідомлення. Лінивий користувач не хоче чекати перевантаження системи, тому вводить пароль щоб скасувати це:

RNB Запис
Figure 9 – Повідомлення-приманка для користувача

Система звісно ж, не перезапустилась, а ми отримали те, що й хотіли – пароль користувача:

RNB Запис
Figure 10 – Пароль користувача

Проте, помічаємо, що вивід strace містить доволі багато даних та є не дуже зручним для сприйняття. Саме тому, вже існують повноцінні автоматизовані скрипти, які використовують утиліту strace і логують операції в файл:

Скрипт потрібно встановити та запустити з правами root. Програма одразу знайшла активну сесію та підключилась до її моніторингу:

RNB Запис
Figure 11 – Автоматичний моніторинг SSH сесії

Результат своєї роботи скрипт поміщає в файл в тимчасовій директорії:

  • /tmp/.skl
RNB Запис
Figure 12 – Перехоплені команди SSH сесії

Текст набув більш приємного вигляду та легкої інтерпретації.

Як бачимо, утиліта strace дозволяє відстежувати системні виклики та сигнали, які отримують процеси під час їхньої роботи. Вона може бути корисною для налагодження, аналізу та розв’язування проблем з програмним забезпеченням. Проте, в контексті експлуатації SSH сесій машини, strace може допомогти хакеру розкривати деякі дії, які здійснюються під час SSH сесій та викрасти конфіденційну інформацію.

 

Read Next

Що таке тестування на проникнення?