22
Еще один недостаток современных клиентсерверных приложений Антон Сапожников

еще один недостаток современных клиент серверных приложений

Embed Size (px)

Citation preview

Page 1: еще один недостаток современных клиент серверных приложений

Еще  один  недостаток  современных  клиент-­‐серверных  

приложений  

Антон  Сапожников  

Page 2: еще один недостаток современных клиент серверных приложений

•  Антон  Сапожников  

•  Занимаюсь  тестированиями  на  проникновение  больше  6  лет  

•  CTF  player  MoreSmokedLeetChicken  – DEFCON,  CODEGATE,  HITB,…  

•  KPMG  

Page 3: еще один недостаток современных клиент серверных приложений

О  чем?  

•  Рассмотрю  типовую  задачу,  возникающую  на  пентестах  

•  Обсудим  возможные  варианты  её  решения  

•  Поделюсь  своими  jps  &  tricks  

Page 4: еще один недостаток современных клиент серверных приложений

Постановка  задачи  

•  Корпоративная  среда  •  Получен  удаленный  доступ  к  рабочей  станции  пользователя  

•  Пользователь  работает  с  толстым  клиентом  СУБД/АБС/….  

•  Как  получить  доступ  к  данным  в  СУБД?  

Page 5: еще один недостаток современных клиент серверных приложений

Простые  решения  

•  Понаблюдать  за  экраном  пользователя  

•  metasploit-­‐>meterpreter-­‐>screenspy|vnc  

Page 6: еще один недостаток современных клиент серверных приложений
Page 7: еще один недостаток современных клиент серверных приложений

Простые  решения.2  

•  Не  увидел  ничего  на  экране  пользователя?  Используй  клавиатурный  шпион!1  

+    metasploit-­‐>meterpreter-­‐>keylogrecorder  –  глюкавый  –  нужно  ждать….  иногда  очень  долго  +    можно  «убить»  приложение  

•  Поискать  в  файлах  пользователя:  –  C:\users\user1\Desctop\pass.xls  –  C:\Program  Files\My  Program\Data\*.*  

Page 8: еще один недостаток современных клиент серверных приложений

Не  очень  простые  решения  снять  дамп  памяти  приложения  •  meterpreter-­‐>memdump  •  meterpreter-­‐>memory_grep  Pros:    В  памяти  можно  найти:  

–  пароли\имена  пользователей  –  конфигурации  –  куски  данных  

Cons:  –  большие  объем  данных  для  анализа  –  только  текущие  данные  пользователя  –  непонятно  что  и  где  искать?  

Page 9: еще один недостаток современных клиент серверных приложений

Не  очень  простые  решения.2  

Перехват  сетевого  трафика  •  windump\*sniff  Pros:    В  трафике  можно  найти:  –  пароли\имена  пользователей  –  данные  запрашиваемые  пользователем  

Cons:  –  большие  объем  данных  для  анализа  –  только  текущие  данные  пользователя  –  непонятно  что  и  где  искать?  –  данные  могут  быть  зашифрованы  

Page 10: еще один недостаток современных клиент серверных приложений

А  что  если?  

•  Пароли\ключи  в  памяти  не  хранятся  •  Паролей\ключей  в  конфигурационных  файлах  нет  

•  Сетевой  трафик  шифруется  •  К  серверу  доступ  разрешен  только  с  некоторых  ip  адресов,  и  нашего  в  этом  списке  нет  

•  Реализована  двухфакторная  аутентификация  

Page 11: еще один недостаток современных клиент серверных приложений

Что  делать?  

•  Хучить  (hook)  функции  работы  с  сервером  в  клиентском  приложении  

 <…>  h    =  connect(database,username,pass,…);  r  =  query(h,  ‘select  PAN,  HNAME  from  CARDS’);  <…>    

Page 12: еще один недостаток современных клиент серверных приложений
Page 13: еще один недостаток современных клиент серверных приложений

Как  делать?  

•  Перехват  функций  работы  с  сокетами  +    универсальный  вариант  – нужно  реализовывать  протокол  – данные  могут  быть  зашифрованы  

•  Перехват  функций  уровня  прикладного  протокола  или  API.  – реализация  сильно  зависит  от  приложения  +    удобная  работа  с  сервером  

Page 14: еще один недостаток современных клиент серверных приложений

Как  делать?.2  Pros:  – Обход  ограничений  по  ip  адресам  –  Работает  в  рамках  пользовательской  сессии,  т.е.  на  сервере  в  логах  будет  только  одно  соединение  

– Обход  аутентификации  пользователя  на  сервере  – Обход  двухфакторной  аутентификации  при  установке  соединения  с  сервером  

– Незаметно  для  пользователя  атакуемого  приложения  

–  Возможность  напрямую  работать  с  сервером  приложения  

Page 15: еще один недостаток современных клиент серверных приложений

Как  делать?.3  

Cons:  – Зависимость  от  конкретной  версии  приложения  

– Права  администратора  – SeDebugPrivilege  

Page 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  -­‐>  username\pass  OCISessionBegin  -­‐>  svchp  OCIA�rSet    -­‐>  OCI_HTYPE_SVCCTX  OCIHandleAlloc  -­‐>  OCI_HTYPE_STMT  OCIStmtPrepare  -­‐>  stmt  OCIStmtExecute  

Page 17: еще один недостаток современных клиент серверных приложений

Например  для  Oracle.2  

– OCIHandleAlloc,  дает  доступ  к  envhp  – OCIStmtExecute,  дает  доступ  svchp  

– Достаточно  корректно  перехватить  всего  два  вызова.  

Page 18: еще один недостаток современных клиент серверных приложений

Как  перехватить?  

– EasyHooking  – DETOURS  – DLL  Injecjon  

•  h�p://syprog.blogspot.ru/2012/05/createremotethread-­‐bypass-­‐windows.html  •  Начало  нужной  функции  патчим  переходом  на  наш  обработчик  

– Your  way  

 

Page 19: еще один недостаток современных клиент серверных приложений

Как  внедрить?  suspend_all_threads(processId));  remoteAddress  =  (unsigned  int)VirtualAllocEx(vicjmProcess,  NULL,  sizeof(shellCode),  MEM_COMMIT,  PAGE_EXECUTE_READWRITE);  

WriteProcessMemory(vicjmProcess,  (LPVOID)remoteAddress,  (LPCVOID)shellCode,  shellCodeSize,  &aux));  

vicjmThread  =  OpenThread(THREAD_ALL_ACCESS,  FALSE,  mainThread);  

GetThreadContext(vicjmThread,  &ctx);    

Page 20: еще один недостаток современных клиент серверных приложений

Как  внедрить?.2  

WriteProcessMemory(vicjmProcess,  (LPVOID)ctx.Esp,  (LPCVOID)&ctx.Eip,  sizeof(unsigned  int),  &aux);  

ctx.Eip  =  remoteAddress  +  sizeof(unsigned  int);  SetThreadContext(vicjmThread,  &ctx)  resume_all_threads(processId);  

Page 21: еще один недостаток современных клиент серверных приложений

Итого  

– Шлем  запросы  прямо  в  СУБД  – Нет  необходимости  аутентифицироваться  – Используем  уже  установленное  соединение  …  – Profit!!1!  

 

 

Page 22: еще один недостаток современных клиент серверных приложений

КОНЕЦ  

Антон  Сапожников  @snowytoxa