顯示具有 安全漏洞 標籤的文章。 顯示所有文章
顯示具有 安全漏洞 標籤的文章。 顯示所有文章

2008年2月23日 星期六

Protect your program from Security Holes

原文作者為 scott at santafe dot edu
常見的系統、程式安全漏洞,大致上可包含幾種情況:
http://www.undergroundnews.com/kbase/underground/hacking/
findhole.htm

1. 有瑕疵的 SUID/SGID 程式(特別是包含 gets(),sprintf(),
strcpy(),system(), popen(),execlp(),execvp() 等函式的
程式),例如 sendmail, httpd ,imapd ,samba 等 suid to
0 的瑕疵程式都可能被用來獲取系統 root 權限,或是
sgid to mail 的瑕疵程式可能被用來讀取他人信件(filter
in elm package),或是允許 shell escape 的程式。

2. 程式接收非(設計師/使用者)預期的輸入值。
( eg. Buffer overflow, delimiter problem, shell
escape, format string, directory traversal, path
disclosure, css, csrf, sql injection )

( ref: shellcode, ';', ':', "\!", "..", '%', '<', '>',
"<", ">", "\r" CR, "\n", LF, 或以其他編碼方式表現以上字元)

3. (Kernel)Race condition.
比如會用到暫存檔的程式,在開啟暫存檔之前,我們可以先預測暫
存檔的檔名,在程式存取之前 "先" 生出這個檔給他去存取,而這
個我們先的概念就是 "race" 的由來,當我們能比正常程序搶先一
步產生檔案,那這個檔案就可以用來覆蓋或是塞資料進去想要改變
的檔案
(ex: symbolic link, tmp file, 利用紅燈間隙闖越馬路或迴轉)

4. (Kernel)Device driver bug.

5. DoS. (Denial of Service)
系統資源的佔用,如記憶體(memory leak),硬碟空間,
process(fork bomb)
( ref: malloc bomb, memory leak, Intel Pentium f00f bug,
land:same ip ports, teardrop by route,ip fragmentation,
nestea, jolt, ping of death,bonk, jolt2 )

6. Secrecy revealed. (eg. cookie, screenshot、
%xwd > filename &)

7. Naming prediction problem.
Symbolic links in /tmp to be appended/overwritten (會被用
來修改、覆蓋可預期檔名的檔案)
( ref: race condition, tmpnam() )
hotmail email url predictable and email content exposing.

8. 病毒、木馬程式 (Trojans)、被修改過的常用工具程式
( ref: Elk cloner, Staog, Bliss, rootkit, logic bomb,
time bomb )




How to avoid , defeat security breaches ?
 Secure UNIX Programming FAQ

How to write secure code.


1. SUID/SGID 等瑕疵程式問題:
==> 寫程式時,即避免使用會有問題的函式,或者在使用較易出問
題的函式時預先處理好傳入的參數、資料。
(ref: 程式碼稽核軟體 rats, flawfinder, its4)

2. 程式接收非預期的輸入值:
==> 在接收任何輸入值前,做好資料的偵錯步驟,其中包括資料長
度的確認,資料是否是合法字元的確認。
(ref: 程式碼稽核軟體 rats, flawfinder, its4)

3. Race condition:
==> 在執行 critical section 的時候,須以各種 locking 方法
確保沒有其他程式能同時存取重要的資料。盡量不在
public /tmp 存取暫存檔案,考慮 /usr/tmp, home 目錄等其他
使用者無使用權限的目錄。使用更嚴謹的亂數暫存檔函式,不要
只用 getpid() 等容易遭到窮舉法攻擊的簡易參數。
(ref: atomic operation, mutual exclusive, bounded waiting,
spinlock, semaphore, disable interrupt, Bakery algorithm)

4. Device driver bug:
==> 盡量以外掛模組方式載入 driver,如此在出問題時較有機會
以移除模組的方式避免安全問題或主機死當。

5. DoS. (Denial of Service):
==> 對於任何電腦資源的使用必須設定上限,例如 process 數目
,硬碟 quota 限制,同時接受(同一來源、使用者)連線的數目
(application layer, tcp udp layer, ip layer...etc),使用
memory garbage collection library, 利用程式語言的
assertion 驗證 program memory resource(stack, heap),對於
使用者來說程式的漏洞、暇疵造成的阻斷服務問題,只有勤加修
補更新程式版本。

6. Secrecy revealed:
==> 程式設計師在使用資源內定的權限時,必須限定預設的權限
大小,以免使用者在使用時不自覺的洩漏資料。

7. Naming prediction problem:
Symbolic links in /tmp problem
hotmail email url predictable and email content exposing.
==> 使用暫存檔案時,必須使用不可預測的檔名,以免資料
外洩、損毀。存取暫存檔時,加上確認檔案為執行程式擁有者的
檢查碼。(ref:race condition, mktemp(), mkstemp())

==> 使用網頁參數當作信件、文件儲存時,必須使用無法預測的、
不重複使用的參數序號產生方法,以避免遭到猜測或窮舉法攻破,
對於存取文件的 URL 參數序號使用也要設定有效時間,當過久未
使用或動作,即自動取消該 URL 參數的有效性。
(ref: md5, /dev/random, /dev/urandom, timeout,
force reload, cookie)

8. Trojans:
==> 使用木馬偵測軟體、網路掃描軟體、掃毒軟體或可確認程式
檔案完整性的軟體,做自身主機的安全檢查。
(ref: md5 signatures, Trusted systems)
(ref: multi-security-level, no read up/no write down)


無線網路的安全問題

無線網路的安全問題

1. 無線網路簡介

IEEE 對於無線網路制定了 802.11 標準協定

有關不同無線 Access Point 之間 Hand Over 的 802.11f (roaming),以及不同傳輸頻率、速度的 802.11[a,b,g]

協定名稱 佔用頻率 標準頻寬 實際傳輸效能
802.11a 5GHz 54Mbps
802.11b 2.4GHz 11Mbps 4 - 6Mbps
802.11g 2.4GHz

802.11b 有兩種運作模式, 一種是無線網卡和 AP 之間建立的網路, 另一種是稱為 ad hoc 的client 對 client 傳輸模式, 在 ad hoc 模式中, 每組使用無線網卡的用戶端均需要(兩兩)在對方的訊號範圍內.

1.1 偵測無線網路的方法.
(a). 主動式偵測
在用戶端送出連線要求, 並檢查是否有回應封包.

使用軟體: netstumbler
軟體平台: MS Windows,
軟體網址: www.netstumbler.com

(b). 被動式偵測
用戶端不傳送封包, 只解析所收到的 802.11 封包.
幾乎無法防備.

使用軟體: Kismet, Wellenreiter, Airsnort
軟體平台: Linux/BSD, Linux, Linux
軟體網址: www.kismetwireless.net
www.remote-exploit.org
airsnort.shmoo.com

RFmon 模式的無線網路卡:
Cisco cards: 在硬體層就有內定的 channel hopping 的頻道掃描功能. 也因為使用較快的頻道掃描, 在某一個頻道飽和時,CISCO 的網卡也較容易遺失封包(missed packet), 但在整體效能比較上還是較高的.

一般常用來做網路掃描的卡是用 CISCO AIRLMC350, 這張卡還包括兩支外接天線, 傳輸達到 100mW, 敏感度 -95dBM (一般 prism2 卡是 20-30mw, -80dbM) Prism2 cards: 需要由軟體部份做 channel hopping, 因此在多做頻道掃描的額外負擔下, 竊聽主機的負載較大. 通常我們用的無線網路竊聽軟體, 都會有包括掃描所有 802.11b 頻道的 channel hopping 程式模組. (Kismet 使用 prism2 hopper 每秒切換三個頻道)

Orinoco cards: 支援外接天線, 掃描頻道的功能在 Linux 平台上,有相關的 card driver patch 可使用(需相對應韌體支援)。

外接天線:
在進行 War-driving 時, 因為車體本身就是一個金屬屏蔽, 外接天線可以為你增加約 0.5db 的訊號強度.

2. 無線網路的媒介及實體網路(Medium Access Control and Physical layer)

一般家用無線攝影機,無線電話和微波爐的波段通常和 802.11b 同樣佔 2.4GHz 頻率,在使用上也容易成為干擾源之一,在訊號強弱的考慮上, 不是訊號越強就越好,需考慮訊號越強,有效距離越遠,也越容易被探測攻擊.

在訊號安全上,可以考慮金屬屏蔽阻擋外來干擾(同樣對外也受影響)或是考慮點對點的紅外線傳輸,因為 802.11b 是無方向性而 IR 是有方向性的傳輸方式.

802.11b 封包的 Header 資訊,包含 source/destination MAC 位址,相關的 Access Point 資訊,通訊的流向,使用的頻道,SSID, WEP ,所支援的傳輸速率. (CISCO AP 還包括額外的 status 欄位來說明此 AP 提供的功能以及此 AP 的所在位置)

802.11b 封包的種類:

2.1 Beacon 封包
一般的無線 AP, 都會不斷的傳輸 Beacon 封包, Beacon 封包內會包含 SSID 訊息, 支援的傳輸速率, 此無線 AP 的 MAC 位址. 一般的 Beacon 封包速率是在 6~10 Beacon packets/sec.

為了安全性, 現在無線 AP 也提供了不包含 SSID 值的 Beacon 功能, 這種 SSID cloaking 的立意在於: 用戶端除非事先知道所使用 SSID, 否則無法使用這個無線 AP. 但是聰明的讀者一定想到了, 等到有用戶要連接時, 就算有 WEP, 還是可以聽到所使用的 SSID :)
(ref: dedicated sniffing)

*另外也可以利用強波干擾 802.11b 的 2.4GHz 頻率(請參考 FCC 規範),當干擾強到無線 AP 或無線網卡需要重新 re-join, 此時就可以主動聽到 SSID;這種方法造成的斷線情形,對用戶而言也可當作是可能被探測的警訊 :)

2.2 Probe response 封包
當用戶端想要連上網路時,他會依據收到的 Beacon 封包,送出 probe response 封包,其中會包含: 所要加入網域的 SSID、所使用的傳輸速率。

2.3 Data 封包
通常是封裝在 802.11b frames 中的 TCP/IP 封包

2.4 Ad hoc 封包
和 Data 封包相同, 但屬於網卡對網卡傳輸不需繞經無線 AP.

BSSID: mac address of the BSS
SSID: 辨示該 BSS 的 32 bytes 字串
DATA RATE: 包括 1Mbps 2Mbps 5.5Mbps 11Mbps
HR/DSSS: High Rate Direct Sequence Spread Spectrum
(high rate 5.5Mbps/11Mbps)

3. WEP(Wired Equivalent Privacy) link layer encryption
通訊加密協定

WEP 所加密的, 是指 data packet 的部份, 並未包括 join, beacon, probes 等控制訊號封包加密 :)

因為共用 private key 的特性, 使得原本 key length 已經不足的 WEP 更加讓人憂慮其安全性.

使用 RC4 演算法的弱點在於時間強度太弱, 竊聽軟體在幾小時內收集足夠封包就可以完全破解所使用的 WEP 加密傳輸(傳輸流量越大, 相對所需時間越少)

為了補強 WEP 相關弱點,已經有許多協定已經完成改版修正。

由 WiFi 聯盟所提出的 WEP 暫時替代方案 WPA(WiFi Protected Access),是屬於 IEEE 制定中的 802.11i 安全標準的子集合,其中包括了 802.1x 的認證系統 (EAP)與 TKIP(Temporal Key Integrity Protocol),WPA 並非 IEEE 的標準協定,而是 WiFi 聯盟各公司在 802.11i 未完成前的暫時解決方案。

與一般用戶相關的地方是有 pre-shared key 機制,需要在 AP 與用戶端分別輸入預設密碼,之後的使用,便可藉此 pre-shared key 計算出要對封包加密的加密金鑰,並且在用戶使用當中,定時重新產生加密所需金鑰,以避免重複使用加密金鑰的弱點。

完整的 TKIP 除了 pre-shared key 以外,還包括 per-packet key mix、訊息完整性 Michael (MIC) message integrity check、有 sequence 規則的 extended initialization vector(IV)、重新產生加密金鑰 re-keying 等功能,彌補已知的 WEP 協定弱點。

認證方面 WPA 也是採用 mutual authentication 的 EAP 方案。

4. EAP 認證協定
MAC 位址認證極容易被竊聽並假造使用, 因此 MAC filtering 位址認證幾乎等同無用。

現行 802.1x 考慮使用 EAP 協定做為雙方認證使用可以加入其他 plug-in 的解決方案。例如: CISCO LEAP 提供額外的登入認證功能,Certificate,甚至是 PKI 環境

目前各廠商正為了網路假造衍生的各種攻擊,提出一套認證協定,原本運用在撥接等點對點連線的廣泛認證協定 (Extensible Authentication Protocol EAP),已經在 RFC 2284 中有所規範。

認證使用的演算法,則由各網路裝置自行決定。這份 802.1x 協定,包括了 Port Authentication Entity PAE ,這個協定的使用者分別是: 無線網路卡端,wireless AP 端,及後端認證伺服器 RADIUS。

認證的演算法,可以使用一般的帳號密碼機制,配合 challenge response 機制,也可以使用 Certificate 機制,只要使用者端和 AP 端以及後端認證伺服器都有支援即可。

802.1x 探討的安全問題,事實上不只是無線網路安全問題,就連有線乙太網路也充滿著 tcp/ip arp spoofing 等問題,基本上,你能夠作到假造,你就可以扮演雙面人(Man in the middle)完全控制別人的連線,這是現行網路協定的弱點,也是 ipsec 極需實作的原因之一。

IP 層以上的 VPN 實作都還是會受到假造攻擊。

簡而言之,現行 link layer 以上的網路協定,都沒做到 client server 雙邊認證,即使上層有認證,還是可以用底層的假造動作去讓你以為連到真實伺服器,而不自覺。

而 802.1x 的 EAP 是要在 client, AP(server) 之後還掛一個 authentication server,完整的 EAP 包含:

client --> AP(server) authentication --> authentication server

讓 AP(server) 端(其實是 authentication server)告訴 AP 可以確認 client 無誤,才允許他從這個 AP(server) 連上網路。

馬里蘭的研究報告[3]指出,你一開始的單方 (asymmetric , 不包括 client 確認是真實 server 的步驟 ) 認證,可以放一個 Middle Host 把你破掉阿。

即使是認證之後,因為 EAP 協定的不完備,假造端可以趁機再送一個 faked-AP address 給 client 讓他跟真的 AP 認證完後,卻還是連到 faked-AP 端,而 faked-AP 再連到真的 AP 端完成假造的連線動作。

即使使用 EAP-TLS ,但沒有做到相互認證還是會有同樣的弱點。

到最後他說這些假造的動作,如果遇到有做 message authentication 的 EAP-MD5 跟 EAP-TLS 就無效(因訊息有加認證),但即使你有 mutual authentication 還是可以用同樣方法達到 Denial of Service...

又 EAP 已經有許多可以做雙邊認證的加強版協定 (EAP-TLS, EAP-TTLS, EAP-PEAP, WPA) ,就是在 authentication server 確認完 client 之後,client 再對 server 做確認的動作,而雙方都會有一個共享 (symmetric, shared secret) master key,所以在協定實作完整的狀況下,應該就可以免於 spoof/hijack 等攻擊。 DoS除外 :)

5. 802.11i
802.11i 與 WiFi Protected Access 的差別在於(WPA 所缺乏的功能): secure IBSS, secure fast handoff, secure de-authentication and de-association, enhanced encryption protocol(如: AES-CCMP)

6. 軟體層防護措施
WPKI
IPsec
SSH, ssltunnel telnet/ftp/http ...etc
沒有支援認證功能的無線 AP, 也可以考慮 NoCat 安全認證防護 (www.nocat.net)

訊號干擾式防護: 發送假造無線 AP 的軟體防止 War Driving/Flying 式的攻擊,該軟體將會產生 53,000 個假造的無線 AP beacon 封包,讓入侵者難以辨別真實的 AP,藉此達到一定的安全性。

但此法在訊號強波干擾攻擊法下仍可藉由聽取 client 端,而非 AP 端封包遭破解。

測試環境: Linux/Perl5.6+/Prism2,2.5,3 802.11b 無線網卡
http://www.blackalchemy.to/project/fakeap/

7. 實際試驗步驟與結果

硬體設備:
Cisco 無線網卡,Magmount 天線, Garmin GPS
掃描軟體:
Kismet 軟體

實際掃描結果是 448 個無線網路, 其中只有 26% 有啟動WEP 加密, 有 75 個無線 AP 是使用出廠內定設定值. 所竊聽明文資訊如下:

email 信件, 線上購物的信用卡資訊, 網路芳鄰傳輸, uPNP 傳輸, 用戶包括一般公寓家庭用戶, 法律顧問公司, 網路書店, 新聞報社.

發現弱點除了包括明文資料外洩, 也包括不完整的網路認證, 造成接收訊號者可以隨意登入(公司)防火牆的內部網路.

參考文章:

1. yentingkuo.bbs at bbs.mgt.ncu.edu.tw 於
tw.bbs.comp.security
所寫 "Re: 無線區網是否安全?" 系列文章。

2. Cisco Aironet Response to University of Maryland's
Paper, "An Initial Security Analysis of the IEEE
802.1x Standard"

3. "An Initial Security Analysis of the IEEE 802.1x
Standard" Arunesh Mishra and William A. Arbaugh
{arunesh,waa} at cs.umd.edu
http://www.cs.umd.edu/~waa/1x.pdf

4. Comments on“An Initial Security Analysis of the
IEEE 802.1X Standard”

5. The comprehensive guide to 802.11b wireless Neworks
by Dragon