🌼🌻 Ищу заказчика для разработки трейсера-сканнера уязвимостей ltrace для Windows 🌼🌻

Talomir

Местный
Местный

Talomir

Местный
Местный
Статус
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 выглядит так:


Код:
        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

Сейчас я в Словакии, где-то на пол года, работаю тут. Жду вас на связи...!
 
Сверху