Гайд Делаем Antistealer с AHK и Windows Firewall Control

Тема в разделе "AutoHotKey", создана пользователем index, 13 июн 2019 в 16:25.

  1. index

    index Постоянный участник

    Регистрация:
    5 мар 2018
    Сообщения:
    75
    Симпатии:
    27
    На создание данного скрипта меня натолкнула эта тема.
    Вкратце, там выделен тезис о том, что Rapogliff (а, вероятно, и не только он) обходит AS от Darkpixel'я и цепляется к левым сайтам. Все эти действия, естественно, проходят от процесса gta_sa.exe.
    Взлом жопы предлагал кинуть в hosts некоторые домены, к которым цепляется Rapogliff, мы же немного улучшим этот способ, динамически создавая для процесса gta_sa.exe вайтлист только из тех IP'шников, к которым он подключается для игры.

    Windows Firewall Control. Неплохая оболочка для стандартного виндоского брандмауэра, позволяющая быстро настроить вайт и блек листы программ (посредством правил брандмауэра), которым можно обращаться в сеть. Но речь сейчас не о ней (все гуглится), а об одном из режимов ее работы, когда доступ в сеть имеют только программы из вайтлиста.
    Всплывающее окно при попытке подключения программы, которой нет в вайт/блеклисте.
    upload_2019-6-13_16-8-46.png
    Главное окно
    upload_2019-6-13_16-10-8.png


    Исходные данные: gta_sa.exe не должно быть в блек или вайтлисте.
    Описание работы: только для internal стиллеров, с external и сам WFC справится. Среди всех процесов gta_sa.exe смотрим ip сервера samp, к которому он подключается (аргумент -h командной строки) и добавляем в вайтлист правило с gta_sa.exe и соответствующим ip адресом. При закрытии процесса gta соответствующее правило удаляется.
    Особенности: скрипт должен быть запущен с правами администратора. Скрипты/плагины gta'шки не смогут удалить/модифицировать правила файрволла, т.к. на это требуются привелегии администратора => они не смогут подключиться никуда кроме ip-адресов игровых серверов samp, на которые вы в данный момент зашли.
    Да, можно было бы создавать правила не через powershell, а через COM объекты и брать путь к gta_sa.exe из запущенного exe'шника, а не из реестра, но так как реализовано - хоть и медленнее, но проще и вероятность ошибки в данных моментах довольно мала.

    #SingleInstance force
    #Persistent
    SetBatchLines -1
    global prevIPs := []
    global mainrulename := "ahk_antistealer_autocreated_rule"
    OnExit("ExitFunc") ; Удалит все созданные за время работы правила
    SetTimer, mainloop, 1000
    return
    
    mainloop()
    {
        currentIPs := []
        for proc in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
            if ( proc.name == "gta_sa.exe" && RegExMatch(proc.commandline, "-h (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", ip) )
                currentIPs.push(ip1)
     
        for k, v in getObjDifference(currentIPs, prevIPs)
        {
            if ( v.action == "del" )
                deleteFirewallRule("'" mainrulename " " v.value "'")
            else if ( v.action == "add" )
                addFirewallRule("'" mainrulename " " v.value "'", v.value, sampGetGamePath() "\gta_sa.exe")
        }
     
        prevIPs := currentIPs.clone()
    }
    
    ExitFunc(ExitReason, ExitCode)
    {
        SetTimer, mainloop, Off
        for k, v in prevIPs
            deleteFirewallRule("'" mainrulename " " v "'")
        return 0
    }
    
    sampGetGamePath()
    {
        RegRead, exePath, HKEY_CURRENT_USER\Software\SAMP, gta_sa_exe
        if ( !exePath )
        {
            ; throw Exception("Not found path to gta_sa.exe.")
            return ""
        }
        if ( RegExMatch(exePath, "(.+)\\gta_sa.exe", folderPath) )
            return folderPath1
        else
        {
            ; throw Exception("Unknown error")
            return ""
        }
    }
    
    getObjDifference(current, prev)
    {
        result := []
        for k, v in current
            if ( !isInObj(prev, v) )
                result.push({"action":"add", "value":v})
        for k, v in prev
            if ( !isInObj(current, v) )
                result.push({"action":"del", "value":v})
        return result
    }
    
    isInObj(ByRef obj, needle)
    {
        if ( !IsObject(obj) )
            return false
        for k, v in obj
            if ( v == needle )
                return true
        return false
    }
    
    deleteFirewallRule(rulename)
    {
        psScript := "Remove-NetFirewallRule -DisplayName " rulename
        runPowershellCmd(psScript)
    }
    
    addFirewallRule(rulename, ip := "", programPath := "", action := "Allow", Direction := "Outbound")
    {
        psScript := "New-NetFirewallRule -DisplayName " rulename (programPath ? " -Program '" programPath "'" : "") " -Action " action " -Direction " Direction (ip ? " -RemoteAddress " ip : "")
        runPowershellCmd(psScript)
    }
    
    runPowershellCmd(cmd)
    {
        Run PowerShell.exe -Command & {%cmd%},, hide
    }
     
    #1 index, 13 июн 2019 в 16:25
    Последнее редактирование: 13 июн 2019 в 17:55
    Cucumber, babulya, Patrick Headdyson и ещё 1-му нравится это.
  2. Ded Perded

    Ded Perded Постоянный участник

    Регистрация:
    31 дек 2018
    Сообщения:
    58
    Симпатии:
    29
    Привет привязке, она теперь не работает.
     
  3. index

    index Постоянный участник

    Регистрация:
    5 мар 2018
    Сообщения:
    75
    Симпатии:
    27
    Как и с антистилером Даркпикселя. Можно вайтлист ip/доменов добавить, но тогда и стиллеры смогут себя туда вписать, если вообще найдут, куда
     
  4. Azller Lollison

    Azller Lollison SK-Team | vk.com/lollison
    Друг

    Регистрация:
    20 июл 2017
    Сообщения:
    1.002
    Симпатии:
    1.143
  5. SuSmer4Coder

    SuSmer4Coder Свой человек

    Регистрация:
    5 авг 2016
    Сообщения:
    342
    Симпатии:
    30
    Internal - есть .exe, стиллер на ahk(который скомпилирован) работает. Или я чего-то не понимаю?
     
  6. index

    index Постоянный участник

    Регистрация:
    5 мар 2018
    Сообщения:
    75
    Симпатии:
    27
    Internal исполняется в целевом процессе. Пример: .sf/.dll/.asi. External исполняется в своем процессе, читай .exe.
    Данный скрипт манипулирует правилами Firewall'a таким образом, что процессы GTA могут обращаться только к игровым серверам => internal стиллеры не смогут подключиться к своим хостингам. Так же не будут работать привязки и обновления.
    .exe стиллер так же не будет иметь никакого эффекта, т.к. ему не даст обратиться в сеть WFC. Разве, что сам пользователь добавит его в вайтлист программ, которым разрешен доступ в интернет.
     
  7. SuSmer4Coder

    SuSmer4Coder Свой человек

    Регистрация:
    5 авг 2016
    Сообщения:
    342
    Симпатии:
    30
    John_Gauvara:[176.32.36.43:7777]":2***0901, на хост пришел лог без проблем мб потому что ахк не привязан к процессу гта, хз.
     

    Вложения:

  8. index

    index Постоянный участник

    Регистрация:
    5 мар 2018
    Сообщения:
    75
    Симпатии:
    27
    Требуется установить Windows Firewall Control (отдельная программа, если кто не понял). Его в средний режим работы. В таком случае при попытке подключения от любого .exe мы видим такое всплывающее окно
    [​IMG]
    Без WFC этот скрипт не имеет смысла.
     
    SuSmer4Coder нравится это.