еще один недостаток современных клиент серверных приложений
1. Еще
один
недостаток
современных
клиент-‐серверных
приложений
Антон
Сапожников
2. • Антон
Сапожников
• Занимаюсь
тестированиями
на
проникновение
больше
6
лет
• CTF
player
MoreSmokedLeetChicken
– DEFCON,
CODEGATE,
HITB,…
• KPMG
3. О
чем?
• Рассмотрю
типовую
задачу,
возникающую
на
пентестах
• Обсудим
возможные
варианты
её
решения
• Поделюсь
своими
jps
&
tricks
4. Постановка
задачи
• Корпоративная
среда
• Получен
удаленный
доступ
к
рабочей
станции
пользователя
• Пользователь
работает
с
толстым
клиентом
СУБД/АБС/….
• Как
получить
доступ
к
данным
в
СУБД?
5. Простые
решения
• Понаблюдать
за
экраном
пользователя
• metasploit-‐>meterpreter-‐>screenspy|vnc
7. Простые
решения.2
• Не
увидел
ничего
на
экране
пользователя?
Используй
клавиатурный
шпион!1
+
metasploit-‐>meterpreter-‐>keylogrecorder
– глюкавый
– нужно
ждать….
иногда
очень
долго
+
можно
«убить»
приложение
• Поискать
в
файлах
пользователя:
– C:usersuser1Desctoppass.xls
– C:Program
FilesMy
ProgramData*.*
8. Не
очень
простые
решения
снять
дамп
памяти
приложения
• meterpreter-‐>memdump
• meterpreter-‐>memory_grep
Pros:
В
памяти
можно
найти:
– паролиимена
пользователей
– конфигурации
– куски
данных
Cons:
– большие
объем
данных
для
анализа
– только
текущие
данные
пользователя
– непонятно
что
и
где
искать?
9. Не
очень
простые
решения.2
Перехват
сетевого
трафика
• windump*sniff
Pros:
В
трафике
можно
найти:
– паролиимена
пользователей
– данные
запрашиваемые
пользователем
Cons:
– большие
объем
данных
для
анализа
– только
текущие
данные
пользователя
– непонятно
что
и
где
искать?
– данные
могут
быть
зашифрованы
10. А
что
если?
• Паролиключи
в
памяти
не
хранятся
• Паролейключей
в
конфигурационных
файлах
нет
• Сетевой
трафик
шифруется
• К
серверу
доступ
разрешен
только
с
некоторых
ip
адресов,
и
нашего
в
этом
списке
нет
• Реализована
двухфакторная
аутентификация
11. Что
делать?
• Хучить
(hook)
функции
работы
с
сервером
в
клиентском
приложении
<…>
h
=
connect(database,username,pass,…);
r
=
query(h,
‘select
PAN,
HNAME
from
CARDS’);
<…>
13. Как
делать?
• Перехват
функций
работы
с
сокетами
+
универсальный
вариант
– нужно
реализовывать
протокол
– данные
могут
быть
зашифрованы
• Перехват
функций
уровня
прикладного
протокола
или
API.
– реализация
сильно
зависит
от
приложения
+
удобная
работа
с
сервером
14. Как
делать?.2
Pros:
– Обход
ограничений
по
ip
адресам
– Работает
в
рамках
пользовательской
сессии,
т.е.
на
сервере
в
логах
будет
только
одно
соединение
– Обход
аутентификации
пользователя
на
сервере
– Обход
двухфакторной
аутентификации
при
установке
соединения
с
сервером
– Незаметно
для
пользователя
атакуемого
приложения
– Возможность
напрямую
работать
с
сервером
приложения
15. Как
делать?.3
Cons:
– Зависимость
от
конкретной
версии
приложения
– Права
администратора
– SeDebugPrivilege
16. Например
для
Oracle
Работа
с
СУБД
Oracle
реализованная
через
OCI.DLL
OCIEnvCreate
-‐>
envhp
3xOCIHandleAlloc
-‐>
OCI_HTYPE_ERROR,
OCI_HTYPE_SERVER,
OCI_HTYPE_SVCCTX,
OCIServerA˜ach
-‐>
srvhp
OCIA˜rSet
-‐>
OCI_HTYPE_SVCCTX
OCIHandleAlloc
-‐>
OCI_HTYPE_SESSION
2xOCIA˜rSet
-‐>
usernamepass
OCISessionBegin
-‐>
svchp
OCIA˜rSet
-‐>
OCI_HTYPE_SVCCTX
OCIHandleAlloc
-‐>
OCI_HTYPE_STMT
OCIStmtPrepare
-‐>
stmt
OCIStmtExecute
17. Например
для
Oracle.2
– OCIHandleAlloc,
дает
доступ
к
envhp
– OCIStmtExecute,
дает
доступ
svchp
– Достаточно
корректно
перехватить
всего
два
вызова.
18. Как
перехватить?
– EasyHooking
– DETOURS
– DLL
Injecjon
• h˜p://syprog.blogspot.ru/2012/05/
createremotethread-‐bypass-‐windows.html
• Начало
нужной
функции
патчим
переходом
на
наш
обработчик
– Your
way