• 6個”檔案上傳”功能的資訊安全風險與防護

    有些網站會提供檔案上傳的功能,例如 DropBox、社交網站提供照片上傳或是部落格網站提供檔案上傳分享等功能。

    駭客可以透過檔案上傳的方式執行惡性程式或是產生非預期的結果。因此,檔案上傳的安全防護不亞於帳號密碼的保護措施。

    這篇文章主要討論這些”檔案上傳”的網站,需要注意哪些資訊安全風險與防護的建議。

    我們會舉 6 個檔案上傳相關安全風險的原因、程式範例討論與安全防護必須要注意的建議。

     

    風險1: 檔案路徑

    file path injection 又稱為 path traversal。這樣的攻擊主要是透過檔案路徑的搜尋,間接存取其他網站的資源。

    當URL 網址的路徑內包含  ../ 就表示該網站有潛在的風險

    舉例來說,下列檔名的參數中,帶有路徑位置,因此駭客就可以藉由修改路徑位置,間接存取網站伺服器其他檔案資源。

    http://www.awesomefileupload.com/downloadFile?filename=/../downloadSrc/my_vacation_photos.zip

    例如,駭客可能會嘗試下列網址

    http://www.awesomefileupload.com/downloadFile?filename=/../../../../etc/passwd

    因此,針對這樣的攻擊,並須對於檔案名稱的輸入加以過濾。相關檔案的權限管理必須加以限制。

    風險2: Null Byte Injection

    Null 在系統內部,主要告訴電腦說,這是這個字串的結尾。

    在一些舊版的IIS 或是Java 對於這樣的 Null 並沒有妥善的處理,會導致一些非預期的行為。讓我們看幾個個案如果使用null byte (%00)在檔名中,會發生什麼情況?

    例如

    http://www.site.com/files?filename=../../../../etc/passwd%00profile.jpg

    雖然剛輸入的檔名為 JPG 結尾,但是舊版的 Java 程式讀取,

    還是會直接讀取到 /etc/passwd。

    雖然這樣的漏洞已經在 Java 7之後修正,

    但是正確的處理 Null byte 的輸入,還是處理輸入值重要的一環。

     

    風險3: 沒有適當的關閉資源

    當每一個檔案被開啟時,都有會一個相對應的 handle 紀錄該檔案開啟的狀態。

    檔案沒有被使用的時候,應該要適時的將該 Handle  關閉。讓系統資源釋放。

    如果長時間都沒有關閉 Handle,會慢慢地導致系統資源不足,

    甚至系統當機,需要重新開機才能解決。

    以下列這個例子,finally這段 code就很重要,因為不管是正常執行還是發生 I/O exception 都還是要 close file handles。

    try {
       fileIn = getUploadInputStream();
       fileOut = new FileOutputStream(validatedFilePath);
       byte[] buffer = new byte[bufferSize];
       int byteCount = 0;
       
       while ((byteCount = input.read(buffer)) >= 0) {
       //what happens if an exception happens here?
              output.write(buffer, 0, byteCount);
       }
    
    } catch (IOException ioe) {
          //handle the exception somehow
    
    
    } finally {
          //close output streams to release memory resources!
          fileIn.close();
          fileOut.close();
    }
    Close File Handle

    但是這樣的寫法,如果遇到 close file handles 又出現 exception 那麼怎辦? 還要額外在處理這樣的 exception 比較複雜。Java 7之後提供 “try-with-resources statement”的寫法,可以自動處理相關 resource 的釋放與關閉。

     

    static String readFirstLineFromFile(String path) throws IOException {
    
    
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    
    
            return br.readLine();
    
    
    
        }
    }
    try-with-resources statement

     

    風險4:上傳惡性程式

    駭客可能利用一些檔案的特性,上傳惡性程式以達到特定行為。下列是比較常見被駭客使用的檔案格式。

    • 病毒、惡性程式
    • 還有 JavaScript 可以造成 CSRF 或是XSS攻擊的 HTML
    • 可執行的程式。例如 JSP, JSPX, WAR, JAR, PHP, ASP, SH等

    以下提供相關副檔名的處理方式,如果真的需要儲存該類的副檔名,建議將該儲存的伺服器與網站伺服器分開。

    避免該儲存的檔案直接存放在與網站伺服器同一台機器。

    副檔名 防護建議
    HTMLHTM 拒絕這樣的檔案上傳。因為 HTML可以內含有害的 JavaScript
    .JS 拒絕JavaScript 可以帶來許多程式執行的風險,例如 JavaScript Injection, XSS, CSRF等。
    .jsp, .jspx 拒絕這類的檔案主要是 Java 網頁的執行。也會間接讓許多有害的程式執行。
    war 拒絕這是 JAR 檔案的集合。包含了 XML, HTML, JSP等。這樣的檔案可以控制取代整個網站的服務。更不能夠上傳。
    jpg pnggif 這些圖形檔的上傳必須要確認檔案格式的正確性。如何確認檔案格式的正確性,這邊另外介紹一個小技巧。”ImageMagick”ImageMagick是command-line的工具程式,可以用來轉換讀取各式各樣的圖形檔。使用這樣的工具,由於是 command-line 執行,要另外注意 command injection 的風險。
    .zip 在解壓縮之前要做一定的驗證。
    .doc, .ppt, .txt, 上傳之後,建議用防毒軟體做一定的掃描。

    風險5:壓縮檔炸彈

    這是一個特別製作的ZIP壓縮檔,該檔案壓縮的層數較多,壓縮之後再壓縮再壓縮…另外,解壓縮之後檔案高達好幾 G

    因此,如果網站沒有經過驗證就直接解壓縮,很容易造成該網站資源耗盡無法運作。

    http://www.unforgettable.dk/

    目前有許多程式都提供相關的 API 可以檢查壓縮檔。

    例如下列 Java 程式碼,在實際解壓縮之前,檢查該壓縮檔案解開後的大小 。

     

    import java.io.IOException;
    import java.util.Date;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    public class MainClass {
    
      public static void main(String[] args) {
    
        try {
          ZipFile zf = new ZipFile("your.zip");
          Enumeration e = zf.entries();
          while (e.hasMoreElements()) {
            ZipEntry ze = (ZipEntry) e.nextElement();
            String name = ze.getName();
    
    
            long uncompressedSize = ze.getSize();
    
    
            long compressedSize = ze.getCompressedSize();
            
            System.out.println(name);
            System.out.println(uncompressedSize);
            System.out.println(compressedSize);
            
          }
        } catch (IOException ex) {
          System.err.println(ex);
        }
      }
    }
    Get uncompressed ZIP filesize

    參考:http://www.java2s.com/Tutorial/Java/0180__File/GetuncompressedandcompressedSize.htm

     

    風險6:真實檔名

    檔案上傳 之後使用一個對照的 ID來儲存,不要用使用者所提供的檔名儲存。

    可進一步參考,這裡有些關於”檔案上傳”的安全設計建議,

    https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines#Uploads

    http://software-security.sans.org/blog/2009/12/28/8-basic-rules-toimplement-secure-file-uploads/

     

    摘要

    針對網站有提供檔案上傳功能,需要注意下列事項:

    • 確認檔案相關的權限,特別是寫入的權限應該要透過控管。
    • 確認檔名。例如 null byte 或是特殊符號的禁止。像是 / or \  ‘ 或是 ..。
    • 確認檔案內的型態內容。例如JPG, PNG 為副檔名時,確認該檔案是否為圖形檔。
    • 檢查檔案的 File headers以確認該檔案內容型態。
    • 用防毒軟體掃描該檔案是否為已知惡性程式。
    • 禁制特定類型可執行的檔案。例如 JS, EXE, SH, HTML 等

     

    Tags: , , , , ,

  • 軟體品管專業課程簡介

    這篇文章主要說明,軟體品管的專業領域可以進階發展的方向。不管你是 RD,長年累月的寫程式、熟悉系統架構。或是QA對於目前不斷執行重複性的測試工作,不知道專業如何發展,可參考這些領域。有系統有計畫的學習,培養相關的專業知識。筆者歸納的六大主題。也是筆者在2014/2015 所開設的軟體專業課程。

    QA Courses

    1. 資料庫與網站效能

    這個主題很廣泛除了效能測試、建立一定的測試基準,測試完之後,針對測試的結果進行分析,並且做效能調教。調教的範圍包含網頁前端、作業系統(Windows , Linux)、資料庫 (MS SQL, MySQL)的效能調教與程式語言 design best practices 等子議題。

    2. 網路封包分析

    透過網路封包分析可以得知網路效能慢的原因、網路遭遇的資訊安全問題、應用程式資料間傳遞的除錯。網路封包分析可以回答的問題像是:到底是 Server 、 client端 還是網路有問題?

    網路內部有大量莫名攻擊行為,這些攻擊的來源為何? 透過什麼方式攻擊?

    3. Troubleshooting

    除錯是QA 也是Developer 一個很重要的技能。這個課程也延伸一些子議題包含 Windows 除錯的工具、Linux 除錯與資料庫除錯等。

    4. 病毒與未知程式碼分析

    當遇到一個可疑或是未知的檔案的時候,要如何做初步的分析。判斷該檔案的行為。

    當該檔案有可能是病毒時,應該如何進行檔案分析技巧。

    當該檔案的原始程式碼不見的時候,如何也能進行初步的邏輯分析,大致了解該程式如何運作

    讓不需要懂組合語言的人也可以做分析!

    5. 自動化測試

    自動化測試包含的子議題也很廣。包含 selenium、Python、與JMeter 等,如何運用這些工具達到更有效率的測試執行,是這個課程的重點!

    6. 網站安全測試

    網站的安全防護、資訊安全測試與防護。資訊安全測試特別對於電子商務、金流相關、帳戶密碼相關的網站特別重要。如何在上線前做基本的測試與防護,以避免公司與客戶商譽的損失,是這個課程的重點。

    參考各課程綱要如下,如有興趣,歡迎來信告知。五人以上即可開班。

    Web Security Testing

    Objective

    Top 10 web security and vulnerability verification and testing.

    Security Issue prevention through development life cycle.

    課程大綱

    • Top 10 Web vulnerability
    • Secure Software Practices through SDLC
    • Manual testing by Browser addon
    • Automation Testing (ZAP, Vega)
    • Prevention
    • Web Log analysis
    • Case study
    • Security testing reporting

    Network Forensic by WireShark

    Objective

    Network issue identification from the packets

    Identify potential Security issue

    課程大綱

    • WireShark uses and analysis
    • Network capture and network segment
    • Network protocol (TCP/IP/HTTP/DNS)
    • Suspicious traffic
    • Identification of Network slow issue
    • Hacked Network packets forensics

     Windows Troubleshooting by SystemInternals

    Objective

    Identify root/cause of Windows issue (leak, hang or crash.)

    Performance issue monitoring and analysis

    課程大綱

    • Windows architecture (thread, process, job. System process)
    • how to identify malware and suspicious process
    • How to identify the performance issue for Windows application
    • Crash, leakage, hang issue root/cause analysis
    • Windows system internals tools usage
    • Case study

     Performance Testing by Jmeter

    Objective

    Web service performance load/stress testing by Jmeter

    Windows/Linux key performance metrics monitoring and tuning.

    課程大綱

    • Performance tools/ metrics
    • Performance analysis for CPU, Memory, Disk and network
    • Tuning options for apache, mysql and linux
    • Windows Performance Tools (ProcessMon, ProcessExplorer Perfmon)
    • Linux Performance tools (Top , iostat, vmstat )

    Web Service Automation testing by selenium/python

    Objective

    Web UI Automation testing/operations by Selenium

    課程大綱

    • Web UI testing /operation automaton by Selenium/python
    • How to complete the automation “without” coding.
    • Prepare the selenium coding environment
    • your 1st automation scripts
    •  handing of complex Web UI (i.e. Ajax, alert)

    Malware Analysis

    Objective

    Suspicious file or malware analysis

    課程大綱

    • Malware type (EXE, DLL, DOC/PPT)
    • Malware static analysis
    • Malware dynamic analysis
    • Reverse Engineering

    Reverse Engineering By IDA

    Objective

    Identify suspicious behaviors

    Identify the program logic of EXE

    課程大綱

    • Basic Uses of IDA pro
    • CrackMe case Study
    • DLL injection case study
    • Downloader Case study
    • Key Logger Case study
    • Http connection C&C Case study
    • OS/VM detection Case study
    • User mode rootkit case study
    Jpeg

    Jpeg

    Tags: , , , , , , , ,

  • 大型會議室舉行的訓練實況

    這場訓練參與人數較多,超過30人以上,

    由於場地比較大,設備也比較先進,因此提前了一個小時準備熟悉

    課程名稱為:Malicious code reverse Engineering by IDA (http://www.qa-knowhow.com/?p=1004)

    課程學習的目標就是:在完全沒有組合語言與反向工程的基礎情況下,都可以學會!

    場地準備方面,包含

    • 雙投影機的測試,一台投影機播放簡報,一台投影機撥放上機操作
    • 錄影。由於有錄影的需求,所以佩戴隨身麥克風。像是在開演唱會。麥克風還要測試是否沒有電池。
    • 學員座位安排。由於場地很大。所以一開始的時候,盡量讓學員往前面中間來坐。
    • 電源延長線。由於課程持續三小時,所以要準備許多電源延長線,供上課學員筆電插電用。
    • 講台桌的使用。一台電腦實機操作,一台播放簡報。需要熟悉。
    • 講台很大。保持所有學員的 Eye Contact 有些難度。盡可能在一些段落做一些走動。

    上課前,熟悉簡報系統

    BeforeClass
    看大家都很認真,由於講台很大,偶爾試著走動跟旁邊的學員互動

    TonyHsu_InClass4

     

    這是上課狀況,有三大投影機,中間的投影機撥放的是簡報內容。左右兩邊的投影機則是實機操作。
    TonyHsu_InClass3

    大家都很認真的在學習
    TonyHsu_InClass2

    另外一個實機操作,看大家都有跟上進度
    TonyHsu_InClass

    看大家都很認真的在上機

    ReverseEng1

    三小時的課程結束,教室又恢復平靜。

    AfterClass

     

    這三個小時的上課,每次上課結束,我都會問參與學員 “今天的上課有收穫嗎?” 總之,課程預期的效益達到了!

    feedback1

     

     

    feedback2

     

    feedback3

     

    feedback4

    feedback5

     

     

    Tags: , ,