- Статус
- Offline
- Регистрация
- 20 Мар 2021
- Сообщения
- 17
- Лайки
- 333
Создание темы не в соответствующем разделе
Доброго дня всем читающим это сообщение, или доброй ночи.
Наткнувшись на проблему отсутствия качественного монитора системных вызовов под Windows, для автоматизации поиска уязвимостей, я начал разработку своего трейсера - аналога ltrace Linux но под Windows.
Так, оказались не работающими или глючными IDA, WinAPiMonitor, Detours, SpyStudio, Process Monitor и другие мониторы API. А под Linux есть замечательные трейсеры ltrace, strace, показывающие системные и библиотечные вызовы любой программы во время её работы, и с параметрами.
Так родилась идея переписать ltrace и для Windows, что я и начал делать. Прошло 10 дней разработки, я использовал библиотеку EasyHook для перехвата API инжектом в целевой процесс, и - работает с 30-40 API вызовами. Я протоколирую в файл или на конссоль, с цветным выводом, основные для безопасности/поиска уязвимостей вызовы API типа lstracat() или CreateNamedPipe(), отображаю в читаемом формате параметры вызовов и провожу начальный анализ атрибутов безопасности вызовов LPSECURITY_ATTRIBUTES.
Далее нужно добить базу перехватываемых API до 500-1000 функций и сделать развёрнутый анализ параметров и атрибутов безопасности, на потенциальные уязвимости. Работы на 2-3 месяца, и я не знаю, как закончить этот проект без заказчика и финансирования - делать надо, а жить не на что во время разработки.
За 10 дней разработки я нашёл 2 фундаментальных уязвимости в Windows 10, которые можно, при желании, эксплуатировать локально или удалённо: null pointer dereference в файловых вызовах kernel32.dll, неперехватываемое исключение, и нулевые атрибуты безопасности в библиотечных вызовах к kernel32.dll, потенциально - в каждой второй программе (это - локальные эксплоиты на доступ к данным или на повышение привилегий).
Список перехватываемых сейчас функций трейссером ltrace выглядит так:
Вывод на консоль с подсветкой синтаксиса монитора API ltrace выглядит как на скриншоте:
Для просмотра ссылки Войдиили Зарегистрируйся
Протокол работы сканера уязвимостей ltrace сейчас выглядит так (log.txt):
Вот такое состояние на начало проекта. Я предлагаю заинтересованному челу заказать или профинансировать эту классную разработку, а может - добавить свои требования и пожелания к программе, могу сделать красивый GUI, например, или добавить в остлеживание нужные функции.
О себе: профессиональный программист-фрилансер с опытом в хэкинге и боттинге, мои программы можно посмотреть по ссылкам в подписи. Пишите мне на:
email [email protected]
skype Talomir Mirotal
Сейчас я в Словакии, где-то на пол года, работаю тут. Жду вас на связи...!
Наткнувшись на проблему отсутствия качественного монитора системных вызовов под Windows, для автоматизации поиска уязвимостей, я начал разработку своего трейсера - аналога ltrace Linux но под Windows.
Так, оказались не работающими или глючными IDA, WinAPiMonitor, Detours, SpyStudio, Process Monitor и другие мониторы API. А под Linux есть замечательные трейсеры ltrace, strace, показывающие системные и библиотечные вызовы любой программы во время её работы, и с параметрами.
Так родилась идея переписать ltrace и для Windows, что я и начал делать. Прошло 10 дней разработки, я использовал библиотеку EasyHook для перехвата API инжектом в целевой процесс, и - работает с 30-40 API вызовами. Я протоколирую в файл или на конссоль, с цветным выводом, основные для безопасности/поиска уязвимостей вызовы API типа lstracat() или CreateNamedPipe(), отображаю в читаемом формате параметры вызовов и провожу начальный анализ атрибутов безопасности вызовов LPSECURITY_ATTRIBUTES.
Далее нужно добить базу перехватываемых API до 500-1000 функций и сделать развёрнутый анализ параметров и атрибутов безопасности, на потенциальные уязвимости. Работы на 2-3 месяца, и я не знаю, как закончить этот проект без заказчика и финансирования - делать надо, а жить не на что во время разработки.
За 10 дней разработки я нашёл 2 фундаментальных уязвимости в Windows 10, которые можно, при желании, эксплуатировать локально или удалённо: null pointer dereference в файловых вызовах kernel32.dll, неперехватываемое исключение, и нулевые атрибуты безопасности в библиотечных вызовах к kernel32.dll, потенциально - в каждой второй программе (это - локальные эксплоиты на доступ к данным или на повышение привилегий).
Список перехватываемых сейчас функций трейссером ltrace выглядит так:
Код:
static LocalHook CreateThread_hook = null;
static LocalHook CreateFileA_hook = null;
static LocalHook CreateFileW_hook = null;
static LocalHook CreateFile2_hook = null;
static LocalHook CreateFileTransactedA_hook = null;
static LocalHook CreateFileTransactedW_hook = null;
static LocalHook CreateFileMappingA_hook = null;
static LocalHook CreateFileMappingW_hook = null;
static LocalHook CreateFileMappingNumaA_hook = null;
static LocalHook CreateFileMappingNumaW_hook = null;
static LocalHook CreateFileMappingFromApp_hook = null;
static LocalHook CreateHardLinkA_hook = null;
static LocalHook CreateHardLinkW_hook = null;
static LocalHook CreateSymbolicLinkA_hook = null;
static LocalHook CreateSymbolicLinkW_hook = null;
static LocalHook CreateSymbolicLinkTransactedA_hook = null;
static LocalHook CreateSymbolicLinkTransactedW_hook = null;
static LocalHook CreateHardLinkTransactedA_hook = null;
static LocalHook CreateHardLinkTransactedW_hook = null;
static LocalHook CreateNamedPipeA_hook = null;
static LocalHook CreateNamedPipeW_hook = null;
static LocalHook CreatePipe_hook = null;
static LocalHook CreateMailslotA_hook = null;
static LocalHook CreateMailslotW_hook = null;
static LocalHook ReadFile_hook = null;
static LocalHook ReadFileEx_hook = null;
static LocalHook WriteFile_hook = null;
static LocalHook WriteFileEx_hook = null;
static LocalHook lstrcpyA_hook = null;
static LocalHook lstrcpyW_hook = null;
static LocalHook lstrcpynA_hook = null;
static LocalHook lstrcpynW_hook = null;
//static LocalHook uaw_wcscpy_hook = null;
static LocalHook strcpy_hook = null;
static LocalHook wcscpy_hook = null;
static LocalHook strncpy_hook = null;
static LocalHook wcsncpy_hook = null;
static LocalHook strcat_hook = null;
static LocalHook wcscat_hook = null;
static LocalHook strncat_hook = null;
static LocalHook wcsncat_hook = null;
static LocalHook lstrcatA_hook = null;
static LocalHook lstrcatW_hook = null;
Вывод на консоль с подсветкой синтаксиса монитора API ltrace выглядит как на скриншоте:
Для просмотра ссылки Войди
Протокол работы сканера уязвимостей ltrace сейчас выглядит так (log.txt):
Код:
ltrace for Windows x86 by Talomir Mirotal 2022, Botting Technologies 12 Lab.
We are in target process, the modules list: buggy.exe ntdll.dll KERNEL32.DLL KERNELBASE.dll MSVCP140D.dll VCRUNTIME140D.dll ucrtbased.dll EasyHook32.dll PSAPI.DLL ADVAPI32.dll msvcrt.dll sechost.dll RPCRT4.dll ole32.dll ucrtbase.dll combase.dll GDI32.dll win32u.dll gdi32full.dll msvcp_win.dll USER32.dll SHLWAPI.dll IMM32.DLL EasyLoad32.dll mscoree.dll mscoreei.dll kernel.appcore.dll VERSION.dll clr.dll VCRUNTIME140_CLR0400.dll ucrtbase_clr0400.dll mscorlib.ni.dll CRYPTSP.dll rsaenh.dll bcrypt.dll CRYPTBASE.dll bcryptPrimitives.dll clrjit.dll OLEAUT32.dll System.ni.dll shell32.dll windows.storage.dll Wldp.dll SHCORE.dll profapi.dll System.Runtime.Remoting.ni.dll ws2_32.dll mswsock.dll System.Core.ni.dll System.Configuration.ni.dll System.Xml.ni.dll
Trace of program execution...:
UNSAFE CALL: strcpy()
strcpy(0x5697348, "strcpy_source") from ucrtbased.dll
UNSAFE CALL: lstrcpyA()
lstrcpyA(0x5697348, "lstrcpyA_source") from kernel32.dll
UNSAFE CALL: lstrcpyW()
lstrcpyW(0x5695292, "lstrcpyW_source") from kernel32.dll
UNSAFE CALL: wcscpy()
wcscpy(0x5695292, "wcscpy_source") from ucrtbased.dll
UNSAFE CALL: lstrcpynA()
lstrcpynA(0x5697348, "lstrcpynA_source", 1024) from kernel32.dll
UNSAFE CALL: lstrcpynW()
lstrcpynW(0x5695292, "lstrcpynW_source", 1024) from kernel32.dll
UNSAFE CALL: strncpy()
strncpy(0x5697348, "strncpy_source", 1024) from ucrtbased.dll
UNSAFE CALL: wcsncpy()
wcsncpy(0x5695292, "wcsncpy_source", 1024) from ucrtbased.dll
UNSAFE CALL: strcat()
strcat(0x5697348, "strcat_source") from ucrtbased.dll
UNSAFE CALL: wcscat()
wcscat(0x5695292, "wcscat_source") from ucrtbased.dll
UNSAFE CALL: strncat()
strncat(0x5697348, "strncat_source", 1024) from ucrtbased.dll
UNSAFE CALL: wcsncat()
wcsncat(0x5695292, "wcsncat_source", 1024) from ucrtbased.dll
UNSAFE CALL: lstrcatA()
lstrcatA(0x5697348, "lstrcatA_source") from kernel32.dll
UNSAFE CALL: lstrcatW()
lstrcatW(0x5695292, "lstrcatW_source") from kernel32.dll
POTENTIAL UNSAFE CALL: CreateFileA()
CreateFileA("fileA.txt", 0x0000, 0x0000, 0x0, 0x0000, 0x0000, 0x0) from kernel32.dll
CreateThread(0x0, 0x2000, 0x1980155792, 0x10513248, 0x0000, 0x5685676) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingW()
CreateFileMappingW(0x1268, 0x0, 0x1000002, 0x0000, 0x0000, "") from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileW()
CreateFileW("fileW.txt", 0x0000, 0x0000, 0x0, 0x0000, 0x0000, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
UNSAFE CALL: CreateFile2()
CreateFile2("file2.txt", 0x0000, 0x0000, 0x0000, 0x0) from kernel32.dll
POTENTIAL UNSAFE CALL: CreateFileTransactedA()
CreateFileTransactedA("fileTransactedA.txt", 0x0000, 0x0000, 0x0, 0x0000, 0x0000, 0x0, 0x0, 0x5695280, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileTransactedW()
CreateFileTransactedW("fileTransactedA.txt", 0x0000, 0x0000, 0x0, 0x0000, 0x0000, 0x0, 0x0, 0x5695280, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileTransactedW()
CreateFileTransactedW("fileTransactedW.txt", 0x0000, 0x0000, 0x0, 0x0000, 0x0000, 0x0, 0x0, 0x5695280, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingA()
CreateFileMappingA(0x0, 0x0, 0x0000, 0x0001, 0x0001, "fileA") from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingW()
CreateFileMappingW(0x0, 0x0, 0x0000, 0x0001, 0x0001, "fileW") from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingNumaA()
CreateFileMappingNumaA(0x0, 0x0, 0x0000, 0x0001, 0x0001, "fileA", 0x1234) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingNumaW()
CreateFileMappingNumaW(0x0, 0x0, 0x0000, 0x0001, 0x0001, "fileW", 0x1234) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateFileMappingFromApp()
CreateFileMappingFromApp(0x0, 0x0, 0x0000, 0x8x8, "fileApp") from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateHardLinkA()
CreateHardLinkA("delete1.exe", "C:\Windows\System32\calc.exe", 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateHardLinkW()
CreateHardLinkW("delete2.exe", "C:\Windows\System32\calc.exe", 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateSymbolicLinkA()
CreateSymbolicLinkA("delete3.exe", "C:\Windows\System32\calc.exe", 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateSymbolicLinkW()
CreateSymbolicLinkW("delete4.exe", "C:\Windows\System32\calc.exe", 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
UNSAFE CALL: CreateSymbolicLinkTransactedA()
CreateSymbolicLinkTransactedA("delete5.exe", "C:\Windows\System32\calc.exe", 0x0000, 0x5695268) from kernel32.dll
UNSAFE CALL: CreateSymbolicLinkTransactedW()
CreateSymbolicLinkTransactedW("delete5.exe", "C:\Windows\System32\calc.exe", 0x0000, 0x5695268) from kernel32.dll
UNSAFE CALL: CreateSymbolicLinkTransactedW()
CreateSymbolicLinkTransactedW("delete6.exe", "C:\Windows\System32\calc.exe", 0x0000, 0x5695268) from kernel32.dll
POTENTIAL UNSAFE CALL: CreateHardLinkTransactedA()
CreateHardLinkTransactedA("delete7.exe", "C:\Windows\System32\calc.exe", 0x0, 0x5695268) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateHardLinkTransactedW()
CreateHardLinkTransactedW("delete7.exe", "C:\Windows\System32\calc.exe", 0x0, 0x5695268) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateHardLinkTransactedW()
CreateHardLinkTransactedW("delete8.exe", "C:\Windows\System32\calc.exe", 0x0, 0x5695268) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
UNSAFE CALL: CreateNamedPipeA()
CreateNamedPipeA("\\.\pipe\pipeA", 0x0000, 0x0000, 0x0001, 0x0400, 0x0400, 0x01f4, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
UNSAFE CALL: CreateNamedPipeW()
CreateNamedPipeW("\\.\pipe\pipeW", 0x0000, 0x0000, 0x0001, 0x0400, 0x0400, 0x01f4, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
CreatePipe(0x5695256, 0x5695244, 0x0, 0x0400) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateMailslotA()
CreateMailslotA("\\.\mailslot\mailslotA", 0x0400, 0x01f4, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateMailslotW()
CreateMailslotW("\\.\mailslot\mailslotA", 0x0400, 0x01f4, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
POTENTIAL UNSAFE CALL: CreateMailslotW()
CreateMailslotW("\\.\mailslot\mailslotW", 0x0400, 0x01f4, 0x0) from kernel32.dll
LPSECURITY_ATTRIBUTES analyses:
Address 0x0 is not readable: UNSAFE
Вот такое состояние на начало проекта. Я предлагаю заинтересованному челу заказать или профинансировать эту классную разработку, а может - добавить свои требования и пожелания к программе, могу сделать красивый GUI, например, или добавить в остлеживание нужные функции.
О себе: профессиональный программист-фрилансер с опытом в хэкинге и боттинге, мои программы можно посмотреть по ссылкам в подписи. Пишите мне на:
email [email protected]
skype Talomir Mirotal
Сейчас я в Словакии, где-то на пол года, работаю тут. Жду вас на связи...!