保護Raspberry Pi不受攻擊的步驟

from http://www.makezine.com.tw/make2599131456/secure-your-raspberry-pi-against-attackers
Raspberry Pi是能夠用在所有專題上的夢幻開發板。價格便宜、使用簡單,廣泛支援各式各樣的作業系統,還有著可用程式控制的GPIO腳位、多核心處理器及多個USB連接埠。

Raspberry Pi非常適合用在自動化和蒐集資訊的專題上,但若一不小心,用了這可愛開發板的簡單業餘專題,恐怕就會成為網路入侵口或其他安全漏洞。Raspberry Pi跟ARM Trustzone不同,沒有安全開機的功能,SD卡和作業系統也無法加密。因此,這裡要介紹Raspberry Pi和各位連接到網路上的機器應該遵守的保全技巧。

為什麼Raspberry Pi會被駭?

  • 其電腦能力遭到濫用,盜取加密貨幣。
  • 攻擊者在攻擊其他主機之際,能夠把這當成中繼點使用,以免被查出來。
  • 這能當作內部網路的入侵口來用。攻擊者可以輕易存取檔案伺服器,安裝勒索軟體。然後就會盜取發黑函用的文件,改寫防火牆和路由器的設定,以便能夠自由進出。接下來,就會攻擊路由器的Web主控臺,執行uPNP操作,還能開啟網路上的其他連接埠進行攻擊。​

密碼

更改預設密碼——假如要安裝最新版本的NOOBS或Raspbian時,要記得將Pi使用者的密碼從預設值改成更長更難猜的內容。跟P@assword1!之類的密碼相比, iamasuckerfor5dollarmojitos這種的會比較安全。就算預定要讓帳號失效,這個步驟也是基本的防護措施,要記得去做。

使用者帳號

下一步是要讓Raspbian當中預設的Pi帳號失效。進行之前,要先建立新的帳號。這時要使用useradd指令。使用額外的旗標之後,還可以設定該使用者新的主目錄。

首先要以Pi使用者的身分登錄,執行以下的指令:

$ sudo /usr/sbin/useradd --groups sudo -m makezine

這會將makezine的部分改寫成自己的使用者名稱,建立新的帳號,替這個帳號建立目錄(像是/home/makezine之類的)。另外,還要建立sudo群組用的帳號,以便使用者可以運用sudo指令。建立新的使用者帳號之後,就要依照以下設定替這個帳號設定密碼:

$ sudo passwd makezine

其次要重設root密碼。密碼要設定得又長又難猜。

$ sudo passwd root

最後再讓Pi帳號失效。

$ sudo passwd --lock pi

現在可以登出Pi帳號,使用新密碼登入新帳號。

保護SSH

預設情況下,Raspbian安裝的SSH(安全殼協定)能夠從任何地方存取。不過,這可以防止SSH的設定變更,唯有使用認證過的SSH金鑰,才能獲准登入特定的機器。私人金鑰至少要備份在2個安全的地方。

做這件事情時,要先使用vi或其他文字編輯器,透過以下指令開啟SSH的設定檔:

$ sudo vi /etc/ssh/sshd_config

然後要設定以下的程式行。這時要確定註解行遭移除。註解行是前端附上#符號的說明用行列,不會變成設定處理的對象。

# 認證:
 LoginGraceTime 120
 PermitRootLogin no
 StrictModes yes

RSAAuthentication yes
 PubkeyAuthentication yes
 AuthorizedKeysFile %h/.ssh/authorized_keys

# 不使用密碼時要更改為yes(不建議)。
 PermitEmptyPasswords no

# 想讓挑戰/回應安全驗證生效時要更改為yes
#(要注意PAM認證和執行緒的問題)
 ChallengeResponseAuthentication no

# 禁止通用密碼時要更改為no。
PasswordAuthentication no

UsePAM no


最後一行非常重要,這會禁用PAM(Pluggable Authentication Modules,可插入式認證模組)或Linux的原生驗證,唯有使用金鑰才能獲准登入。接下來要產生SSH金鑰。執行時要使用Windows的PuTTY或Linux的ssh-keygen指令。使用者的主目錄下要建立「.ssh」目錄,建立包含以下指令在內的authorized_keys檔案。設定時要記得適當下放權限(否則就不能用金鑰認證)。

$ mkdir ~/.ssh
 $ chmod 0700 ~/.ssh
 $ touch ~/.ssh/authorized_keys
 $ chmod 0600 ~/.ssh/authorized_keys


接下來使用文字編輯器開啟authorized_keys檔案,貼在產生的公開金鑰上,以便能夠登錄。這時必須重新啟動SSH,讓指令發揮作用。

$ sudo systemctl restart ssh

防火牆

SSH設定完畢之後,就要檢查Pi的iptables防火牆是否正確運作。為了保險起見,最好要事先設定防火牆,讓防火牆的規則生效,連線被擋住時會記錄訊息。首先要使用以下指令安裝iptables。

$ sudo apt-get install iptables iptables-persistent

使用iptables防火牆時,需要讀取新的核心模組。最簡單的方法是重新啟動Pi。安裝iptables之後,就要使用以下指令檢查iptables現在的規則:

$ sudo /sbin/iptables -L

這樣就會顯示規則的清單,裡面應該什麼都還沒寫。規則可以透過以下指令儲存及編輯成文字檔。

$ sudo /sbin/iptables-save > /etc/iptables/rules.v4

這個檔案會讓iptables常駐,當系統啟動或重新啟動時防火牆就一定會生效。檔案要依照以下形式儲存(要因應需求編輯規則):

$ sudo cat /etc/iptables/rules.v4
 :INPUT ACCEPT [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]

# 允許所有回送(lo0)流量,所有流量降到不使用loO時的127/8。
 -A INPUT -i lo -j ACCEPT
 -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# 允許所有確定的接收連線。
 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允許所有發送流量。
 # 想要單單允許特定流量時,請變更這裡。
 -A OUTPUT -j ACCEPT

# 允許SSH連線。
 # --dport的數值要和/etc/ssh/sshd_config內的相同。
 -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# 將iptables拒絕的呼叫記錄起來(透過dmesg指令就看得到)。
 -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# 拒絕其他所有接收連線。除非政策明確允許,否則預設為拒絕。
 -A INPUT -j REJECT
 -A FORWARD -j REJECT

COMMIT


接下來要確定iptables會正常運作。這有點複雜,要透過SSH遠端連線,雖然會發生某些問題,卻不想切斷連線。幸運的是有個指令能夠套用規則,幫忙檢查連線。假如在一定時間內沒有回應,程式就會判斷連線遭到切斷,取消變更。假如有所回應,變更就會固定不變。透過以下指令即可進行:

$ sudo /usr/sbin/iptables-apply /etc/iptables/rules.v4

假如一切功能正常,就會套用變更,其結果可以透過以下指令檢查:

$ sudo /sbin/iptables -L
 

關掉不必要的功能。防火牆只須列出必要的服務。要儘量選擇非預設的連接埠。

要連線到自己的網絡上。Pi必須要安裝在自己的網絡上,平常使用時要能辨識發送到網路上的連線,事先過濾。還要記得想辦法讓Pi連不上自己的檔案伺服器或其他系統。從Pi到網路的連線最好也要加上限制。

更新和備份

套件要定期更新。我們要透過Raspberry Pi的網站檢查更新。只要安裝unattended-upgrades這項套件,就能夠自動更新。詳情可見官方Debian wiki

設定要做備份。SD卡有時會壞掉,所以要將資料或SD卡的所有內容,弄成加密套件、檔案或檔案系統,備份到USB記憶體內。

儘量別用預先安裝的映像檔。假如要使用從某個地方取得的預裝映像檔,就要想想為什麼必須這樣做。原作者值得信賴嗎?內容沒有經過改造,摻雜可疑的軟體和後門嗎?還有可能是在作者不知情的狀況下混進去的,要小心查明這是否安全。倘若不確定時,就要將Pi放在自己的網路上,放在連接不到其他系統或網路的地方檢查過再安裝。假如路由器有DMZ區段或訪客用的Wi-Fi網路時,最好慎選Pi放置的地方,前提是只有想曝光的服務才能公開在網路上。要是無論如何都想安裝映像檔,最好依照以下方式進行:
 
  • 所有帳號的密碼都要變更,而不光是Pi使用者和root使用者。Raspberry Pi附贈的軟體包含各式各樣的服務。只要使用netstat,就可以檢查哪個服務會生效,所以要事先設定防火牆和路由器,這樣就能單純公開所需的內容。
  • 透過以下方法重新產生SSH金鑰:

# /bin/rm -v /etc/ssh/ssh_host_*
 # dpkg-reconfigure openssh-server

 
  • 將生效服務所用的連接埠變更為通常沒在使用的連接埠,防止軟體自動安裝及服務大量掃描。大多數攻擊者會鎖定標準的連接埠。
  • 詢問映像檔作者最新的更新和相關的安全注意事項。

確保持續性

硬體看門狗計時器(Hardware Watchdog Timer):假如Raspberry Pi在旅行離家的期間當機,自動化系統也會停擺。不過,Raspberry Pi配備博通硬體看門狗計時器,當Raspberry Pi沒有回應時就會自動重新啟動

散熱片:假如Raspberry Pi因為天候或超頻導致過熱,就會是一樁憾事。因此最好要事先將散熱片裝在CPU上,這樣即使承受巨大的負荷也不會熱失控。散熱片價格既便宜,安裝也容易。

Logwatch:這會在晚上發送電子郵件報告前一天的活動和警告訊息。因此,Raspberry Pi必須要能發送電子郵件,這時exim4郵件轉寄代理就派上用場了。使用以下指令即可安裝Logwatch:

$ sudo apt-get install logwatch

安裝過後,就必須配合/usr/share/logwatch/default.conf/logwatch.conf的檔案進行編輯。預設情況下,Logwatch會發送電子郵件給root帳號,說不定會需要一些轉寄的方法。詳情可以看我的電子郵件轉寄相關文章

留言

熱門文章