# 網路安全 Midterm
###### tags: `security`
## Module 2
- 封包:封包交換網路中傳輸的格式化數據單位, 分成 control 資訊 (header) 和 data 本身 (payload)
- control 資訊:包括 source 和 destination 的位址, 封包順序, 錯誤驗證碼等
- IP packet:可以看到 header 包括 source 和 destination 的 IP 位址, 版本, 做什麼服務, 封包大小, ID, TTL, checksum 等資訊

- 封包傳送時, 如果出錯, 只會出錯的封包重傳
- 資料太大, 會切割成 frame, 每個 frame 就是一個封包
- 封包 = header + data block (太大會被切割) + tailer (CRC 等)
- 切割封包的原因:(1) 太大的話, 可能造成網路壅塞; (2) 可以做 routing (由網路層負責), eg. 封包 $A_1$ 和 $A_2$ 可以各自走比較快的路線, 最後再合起來, 速度比較快
- OSI:application -> presentation -> session -> transport -> network -> data-link -> physical layer
- router:提供 routing 和 forwarding 兩種機制, routing 指的是決定封包 source 到 destination 位址所要經過的路經, 包含整個大網路, 需要路徑上所有 router 才能完成; forwarding 只關心一台 router 本身, 對照 routing table, 把封包從 router 的輸入端送到對應的輸出端
- routing table:router 會有自己的 routing table, 決定將封包送到哪一個輸出介面卡; 當一個封包進來的時候, router 會先看此封包的 destination IP, 把 IP 和 Genmask 做 AND 運算, 如果算出來等於 Destination 這個欄位, 就會送到 Iface; 如果很多個 Destination 符合, 就找最多 1 (prefix 值最大)的 Genmask, 往它的 Iface 送; 通常 Genmask 中 0.0.0.0 都是預設, 所以跟它做 AND 一定是 0, 但 prefix 就最小

- 封包重組:因為 routing 的關係, 先送不一定先到, 封包的 header 會記錄編號, 所以接收端可以根據這些編號, 把封包重組回完整的資料
- 安全性:如果封包的 data 被修改, 很難被發現
- 不同的 protocol (eg. TCP, UDP 等), 其網路封包的結構也會不同, 會有不同欄位
- network protocol:網路通訊雙方事先溝通協議好的一組通訊規則與參數, 若使用明文傳輸, 沒有做加密, 資料中間被人擷取封包的話, 就很容易被偷走 sensitive information (eg. 帳密, key 等)
- promiscuous mode:早期使用 hub 作為網路的連接設備, 網路卡為了效能, 不會處理所有傳過來的封包, 會先去檢查這個封包是不是它要處理的; 但在 promiscuous mode 下的網路卡, 不會做檢查的動作, 又 hub 採用 broadcast 的方式進行傳送, 就可以看到別人的封包
- port mirroring:流量側錄
- 網路監聽 (sniffing):擷取企業的 switch ports 和 Ethernet cable, 將系統的網卡轉成 promiscuous mode, 來抓取所有網路上的封包
- 緩解 sniffing (mitigation):(1) 用強一點的驗證; (2) 使用 antisniffer 工具, 偵測網路中使否有人在監聽
- HTTPS = HTTP + SSL/TLS, 如果取得 user 端的 key, 就可以解析 HTTPS 封包
- ARP spoofing:在同一個網段下, attack 作為中間人, 竄改 victim 雙方的 ARP 快取區, (eg. 回覆 gateway 我有受害者的 MAC, 並回覆受害者我有 gateway 的 MAC), 使的兩個 victim 之間在通訊時, 所有封包都會經過 attacker
## Module 3
- 網站服務基本架構:client 端 (eg. browser) 發出 request, server 透過 application 去 database 拿資料完後, 回覆給 client
- Why CGI ? 因為以前網頁是靜態, 如果是動態 (eg. 和使用者互動), 就需要靠外部程式協助
- CGI 的原理是:browser 發出 request 給 server, server 以環境變數的方式, 將使用者的資料傳給外部可執行程式; 外部可執行程式會根據這些資訊執行, 並將結果回傳給 server, server 會再傳給 browser
- CIA:需要滿足這三個條件, 資料才可以稱為安全, confidentiality:傳輸過程必須確保資料的機密性; integrity:傳輸過程中, 需確保資料沒被第三方竄改; authentication:傳輸過程中需驗證身分
- http PUT method 漏洞:讓 attacker 可以上傳惡意檔案
- OS or web server 軟體本身的漏洞:沒更新 or 沒 patch
- 不安全的通訊:改用有加密的連線, eg. SSL/TLS
- SSL:https://pccicblog.wordpress.com/2015/12/17/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0-ssl/

- http: port 80, https: port 443
- port scan: 可以用 nmap 掃, 看哪些 port 是打開的, 可以利用
- injection:SQL injection, 在使用者輸入後面加註解, 後面塞壞壞的東西
- session:session ID 如果暴露, 又沒設定 time out, 就可以不經過驗證, 直接偷用上一位使用者的 session
- 用太弱的密碼 or 加密演算法, eg. md5, base64, 很快就可以被暴力破解
- XSS:跟 SQL injection 類似, 沒去檢查使用者輸入的字串, 讓網站執行所注入的 script; 可以分成 stored, reflected, DOM
- 防護:把檢查放在 server 端, 限制使用者輸入, 過濾字串
- 序列化 / 反序列化:object -> serialization -> binary, 輸入惡意字串, server 解析完後就執行惡意指令
- robots.txt:存在網站根目錄下的文字檔案, 告訴搜尋引擎, 這個網站哪些內容是可以 / 不可以取得
## Module 7
- DoS vs DDoS
- DoS:attacker 不斷發出 request, 耗盡系統資源 (一對一)
- DDoS:先入侵一定數量的殭屍主機, 植入跳板程式, 再控制這些主機來發出 DoS 攻擊, i.e. 多個主機對一台目標機器發出 DoS 攻擊 (多對一)
- DDoS 攻擊網路資源 (消耗頻寬)
- 可分成直接攻擊 (eg. ICMP, UDP flood attack), 反射及放大攻擊 (eg. ACK, DNS, SNMP), 鏈路攻擊等
- ICMP flood attck:短時間對 victim 發送大量的 ICMP 封包, 可以分成 ping of death 和 smurf
- ping of death:發超過 65536 bytes 的 ping 封包, 讓 victim 無法處理
- smurf:廣播大量的 ICMP 封包到網路上, 把 source IP 改成 victim 的主機, 這樣所有電腦收到 ICMP 封包後, 會全部回覆給 victim, 導致 victim 癱瘓
- UDP flood attack:因為 UDP protocol 不需要先建立連線, 所以 attacker 可以發出任意 port 的封包, 如果是正常的 UDP 應用 port, 那麼可能干擾正常 service; 如果沒有, 目的端要回送 ICMP 封包, 就會消耗系統資源
- Coremelt attack:鏈路攻擊是以上層的骨幹網路為目標, 先有分布廣泛的殭屍網路, 讓殭屍網路透過 victim 的骨幹網路互相傳大量的封包, 耗盡頻寬
- DDoS 攻擊系統資源
- 可以分成攻擊 TCP 連線和攻擊 SSL 連線
- TCP flood attack:發送大量 TCP 封包, 讓 victim 無法處理, 可以分成 land attack, teardrop attack, TCP SYN flood attack
- land attack:attacker 發送 source IP 和 destination IP 相同的封包, 導致 victim 主機會回傳給自己, 造成無窮迴圈, 耗盡系統資源
- teardrop attack:發送一堆特別設計過的封包片段給 victim, 這些封包片段有重疊的位移值 (正常是不會重疊的), 造成 victim 重組的時候, 無法正確處理封包, 導致系統當機

- TCP SYN flood attack:TCP 連線前須要先三向交握, attacker 假造 source IP 發出 SYN 封包, victim 會將沒收到 ACK 的 SYN 封包暫時放在 queue 裡面直到 timeout, attacker 故意一直不回應 ACK, 導致 victim 系統塞滿 SYN 封包

- 攻擊應用資源
- 可以分成攻擊 DNS service 和 web service
- 處理
- 殭屍網路 -> 需要各國合作
- 偽造 IP -> 在出入口的 router 檢查, 如果不是內網就不可以送出
- 反射點 -> 做好正確設定 & 即時更新
- mitigation
- 稀釋流量:平均分散 load (eg. CDN)
- 清洗流量:過濾有問題的封包, 驗證使用者
- CDN (Content Delivery Network)
- 在世界各地建 server, 利用快取把原本主機上的資料複製到每個 server, 使用者發 request 時, 會去抓最近 server 的資料回傳
- eg. 在台灣要連美國的網站, 如果有用 CDN server, 在日本有節點的話, 就可以直接抓日本的資料, 讀到的內容會和美國網站的一樣
- 可以減少對網站的流量, 降低 load, 但如果直接用 IP 連就沒辦法了
- Anycast
- 網路定址分成:unicast, multicast, anycast
- unicast:一個來源傳送資料到唯一的位置, 平常用的網路服務通常是 unicast
- anycast:一個來源傳送資料到最近的位置, 可以稀釋流量, 某幾台 server 被打垮時, request 也可以轉到其他 server
- firewall
- 保護內網不受外網的非法連線, 擋 DDoS 攻擊
- eg. 針對 SYN flood attack, 有三種保護方式:SYN 閘道, 被動式 SYN 閘道, SYN 中繼
- SYN 閘道:user 先發出 SYN request, 防火牆當作 gateway, 直接轉發給 server; server 回覆 SYN/ACK, 防火牆轉發給 user, 並以代理用戶的身分送 ACK 給 server, 完成三向交握 (就不會 timeout); 直到 user 真正的 ACK 封包抵達, 如果有資料, 再轉發給 server, 要不然就直接 drop
- 被動式 SYN 閘道:把防火牆當作 gateway 或 proxy, 去設定防火牆的 SYN request 超時參數 (<< server 的超時期限), 如果 user 一直沒回傳 ACK, 防火牆就發送 RST 封包, 使 server 的連線中止
- SYN 中繼:作為 proxy, 去過濾 invalid 的連線, 收到 user 的 SYN 封包, 紀錄該封包的狀態資訊, 先不轉發給 user, 自己向 user 回覆 SYN/ACK, 收到 user 的 ACK 後, 如果合法再向 server 送 SYN 封包完成三向交握
- IPS (intrusion prevention system) vs. firewall
- 防火牆是直接把 port 擋下來 (可以下 ufw 指令去改防火牆規則, 看要把哪些 port 關掉)
- IPS 是去分析攻擊特徵, 把特定封包擋下來
- Slowloris
- 正常 http request 以 \r\n\r\n 結尾, 表示 client 端結束發送, server 端開始處理
- Slowloris 永遠不發送 \r\n\r\n, 在 http header 把 connection 設 keep-alive, 要求 sever 一直保持連線不要斷, 每隔幾分鐘發送一個 key value 格式的資料給 server, server 以為沒收完就一直等, 直到系統被 attacker 塞滿連線, 沒辦法服務正常的 request
- snmp 放大攻擊
- 攻擊手法是對開啟 snmp service 的 device (port 161 ?) 發出 GetBulk request, 用 default 的 community string (通常沒改就是 "public") 當作憑證, 把 source IP 改成 victim 的 IP
- device 收到 GetBulk request 後, 會把 response 結果回傳給 victim, 當大量的結果傳給 victim, 就達成 DDoS attack
- DNS 放大攻擊
- 也是 response 封包比 request 封包大, 所以 attacker 可以利用普通的 DNS 查詢達成放大攻擊
- 攻擊手法是把 source IP 改成 victim IP, 發出查詢的 request, DNS 收到後會遞迴查詢, 把大量的解析結果傳給 victim, 達成 DDoS attack
- DDoS 防禦
- 主機端:裝防毒 or 防火牆, 更新 OS
- 網路端:裝防火牆 or IPS, 設定好 router
- 駭客入侵手法
- probe, penetrate, persist, propagate, paralyze (癱瘓)
- 資料收集, 掃看看哪些 port 是開的
- 入侵系統, 裝後門
- 擴散受害範圍 / 持續維護系統存取權 / 偷資料
- 刪 log, 把植入的程式隱藏起來
- 發生 DDoS, 處理
- 通知 ISP
- 如果受害的是一個主機, 直接去改 DNS server 上的 IP
- 去改防火牆或 router 的規則, 來過濾封包
- 直接 block 特定來源的所有封包
- U2R
- 取得系統 root 權限
- eg. 製造 buffer overflow, 塞 shellcode 或是利用 gadget 構成 ROP chain 來 spawn the shell
- R2L
- 運用 service 的漏洞, 存取 sensitive 檔案 or 使用者密碼
- backdoor
- victim 被植入後門程式, 執行的話會開啟特定的 port 等待 attacker 建立連線, 之後 attacker 可以利用此 port 控制 victim 來執行各項指令, 包括竊取資料 or 植入其他惡意程式
- IDS 入侵偵測
- network-based:分析網路封包, 比對資料庫中已知的攻擊特徵
- host-based:看 log file, 拿系統 event 和資料庫中已知工及特徵做比對, 監控應用程式, 看系統擋案有無被改過
- misuse detection
- anomaly detection (異常偵測)
- 偵測分析方法:FSM, NN, 貝氏網路
## Module 5
- 弱掃 vs PT
- 弱掃是去掃看看有沒有既有的漏洞, 掃完給你報告
- PT 是去打穿你的網站 or 設備
- SCAP 協定
- CVE:最常見的漏洞編號
- CVSS:有公式去算弱點的嚴重性 & 影響 (基本, 時間週期, 環境等)