# 網路安全 Midterm ###### tags: `security` ## Module 2 - 封包:封包交換網路中傳輸的格式化數據單位, 分成 control 資訊 (header) 和 data 本身 (payload) - control 資訊:包括 source 和 destination 的位址, 封包順序, 錯誤驗證碼等 - IP packet:可以看到 header 包括 source 和 destination 的 IP 位址, 版本, 做什麼服務, 封包大小, ID, TTL, checksum 等資訊 ![](https://i.imgur.com/auREeCP.png) - 封包傳送時, 如果出錯, 只會出錯的封包重傳 - 資料太大, 會切割成 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 就最小 ![](https://i.imgur.com/EnWsPia.png) - 封包重組:因為 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/ ![](https://i.imgur.com/B1NtwEm.png) - 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 重組的時候, 無法正確處理封包, 導致系統當機 ![](https://i.imgur.com/Ce1lvqU.png) - TCP SYN flood attack:TCP 連線前須要先三向交握, attacker 假造 source IP 發出 SYN 封包, victim 會將沒收到 ACK 的 SYN 封包暫時放在 queue 裡面直到 timeout, attacker 故意一直不回應 ACK, 導致 victim 系統塞滿 SYN 封包 ![](https://i.imgur.com/msD2EqF.png) - 攻擊應用資源 - 可以分成攻擊 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:有公式去算弱點的嚴重性 & 影響 (基本, 時間週期, 環境等)