最新的跨瀏覽器攻擊手法:Clickjacking

由於這次我報名參加 2008 OWASP 亞洲年會時,在議程中看到一個新的攻擊手法(或漏洞)稱做 Clickjacking,而 Clickjacking 這名詞有多新呢?連 Wikipedia 上面的的 Clickjacking 資料都是 10/9 才剛新增上去的,我進而研究了一下這個攻擊手法的細節,這才意識到這個漏洞的嚴重性,各位千萬不可等閒視之。

舉一個簡單的例子來說,當你進入一個使用 Clickjacking 攻擊手法的惡意網站時,該網站可以控制你滑鼠點擊的任何連結,而且就算你的 Browser 在不啟用 JavaScript 的情況下也能夠發動攻擊。更進一步,這種攻擊手法甚至可以讓惡意網站透過控制你的 Web Camera 或麥克風,這裡有個 YouTube 影片展示這個攻擊手法的過程:

比較有膽識的人,也可以到這裡體驗一下整個攻擊的過程! 不過這個網頁已經不提供完整的功能了(可能是太多人嚇到在任意網站看到自己的錄影畫面吧),雖然已經拿掉完整的錄像功能,但還是可以看看整個 Clickjacking 示意的過程,我覺得玩過一次後還蠻容易瞭解的。而自己在玩的時候,可以勾選 Show the jacked IFrame 勾選選項:

Show the jacked IFrame

進去該網頁之後,起初會看到白白的一片網頁區塊,當中只有一個 Click 按鈕,這一塊白白的其實是一個被嵌入在 iframe 中的網頁,而這個 Click 按鈕是透過 CSS 疊在上面的,目的是騙你用滑鼠點擊該按鈕,而事實上使用者點擊的是 iframe 網頁中的連結或一些同意按鈕,進而達到攻擊目的,詳細的攻擊過程看影片就知道了。

以下圖示是從影片中截錄出來的畫面,該 IFrame 載入的是 Adobe Flash Player 設定管理員 中的 網站私用設定 畫面,真正攻擊時,使用者是不會看到 IFrame 中的內容的,使用者只知道要點擊 Click 按鈕,但事實上點擊的卻是「我同意」,進而開啟 Web Camera 功能,甚至於將所以錄下的畫面透過網路傳送到任何位址。

Clickjacking DEMO

相信有些許網頁開發經驗的人看到這裡應該會「有感覺」了, 嚴重性是不言可寓的。

相關連結

  

此文章由 will 發表於 2008/10/11 下午 08:49:26

永久連結 | 評論 (5) | 此文章的RSSRSS comment feed |

分類: Web | Security | ASP.NET

標籤:

收藏:

將 IIS 中已安裝的 SSL 憑證移至 Apache 2.2 for Win32 安裝

這幾天為了替客戶安裝一個 VeriSign 憑證到 Windows 平台的 Apache 2.2 上面傷透腦筋,問了好多朋友都沒有人有這樣的經驗,網路上是有一大堆文章,不過所有的文章都是講如何「自己簽發 SSL 憑證」,但我得到的任務卻是要把一個已經申請下來已經安裝至 IIS 的憑證安裝到 Apache 2.2 for Win32 中,而我手邊得到的資訊十分有限,只有拿到一個 CA.cer 檔,還有一個已經安裝在 IIS 中且可匯出的 VeriSign 憑證。

首先,我上網找資訊找幾個小時,找的資料也很多,不過大多不符合我的需求,讓我很沒方向感,最後還是跟客戶要到 網際威信(HiTRUST) 的電話,直接打電話到認證客服部詢問安裝的方式,果然專家一出手、便知有沒有,他們很精確的瞭解我的問題並且指導我解決這個問題。

我打算用「最短路徑」說明如何解決這個問題,以下是我本次安裝、設定的完整紀錄:

步驟 0:確認手邊現有的資訊(只要這些就夠了)

  1. 客戶有提供給我一個 CA.cer 檔案。
  2. IIS 中已經安裝了 VeriSign 憑證,且憑證的私鑰(Private Key)是可以匯出的。
  3. 客戶有提供給我當初要申請憑證前所設定的私鑰密碼。

步驟 1:準備相關資料與檔案

  1. 下載 Apache 2.2 安裝檔並安裝完成
  2. 中繼憑證檔 ( Server Certificate Chain File )
    • 在 Apache 2.2 中預設檔名為 server-ca.crt
    • 這個檔案就是客戶提供給我的 CA.cer 檔,建議可以將他改名為 server-ca.crt,並將此檔移至 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下。
    • 這個檔案的內容也會在核發憑證下來後的通知信裡面出現,只要將信件中 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 為止的內容複製起來,並儲存成 server-ca.crt 檔即可。
  3. 伺服器憑證檔 ( Server Certificate File )
    • 在 Apache 2.2 中預設檔名為 server.crt
    • 「伺服器憑證檔」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。
  4. 伺服器私鑰檔 ( Server Private Key File )
    • 在 Apache 2.2 中預設檔名為 server.key
    • 「伺服器私鑰檔 」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。

步驟 2:從 IIS 匯出憑證(包括 伺服器憑證伺服器私鑰

  1. 開啟已經設定好 SSL 的網站並開啟內容,再切換到[目錄安全設定]頁籤,點選 [伺服器憑證] 按鈕
    開啟已經設定好 SSL 的網站,並開啟內容,再切換到「目錄安全設定」頁籤,點選 [伺服器憑證] 按鈕
  2. 選取 [匯出目前的憑證到 .pfx 檔案],並按 [下一步]
    image
  3. 輸入要儲存 .pfx 檔案的路徑與檔名
    輸入要儲存 .pfx 檔案的路徑與檔名
  4. 輸入當初申請憑證時所設定的密碼
    輸入當初申請憑證時所設定的密碼
  5. 最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。
    最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。

步驟 3:將 IIS 匯出的 PKCS12 憑證檔 ( C:\mycert.pfx ) 轉換成 Apache 所需的格式

  1. 透過 Apache 2.2 所附的 openssl.exe 工具進行檔案格式的轉換
    1. 先開啟「命令提示字元」視窗,並進入 C:\Program Files\Apache Software Foundation\Apache2.2\bin 目錄
    2. 執行以下指令:
      C:\...\Apache2.2\bin> openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes
      Enter Import Password:
      MAC verified OK
      當你輸入 openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes 指令後,會被要求再次輸入憑證密碼,若驗證正確就會建立一個 c:\mycert.txt 檔案。
    3. 這時用記事本開啟 c:\mycert.txt 檔案,裡面同時包含兩個憑證,分別是 伺服器私鑰(RSA PRIVATE KEY) 與 伺服器憑證(CERTIFICATE)。
    4. 請在 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下先建立兩個空檔案,檔名分別是 server.keyserver.crt
    5. 這時將 c:\mycert.txt 檔案中的兩個憑證內容分別複製到這兩個檔案內,檔案的內容應該只包括 -----BEGIN *----- 到 -----END * ----- 的內容,c:\mycert.txt 中其他的資料都不能出現在這兩個檔案中。
      1. server.key 的內容會像如下的內容
        -----BEGIN RSA PRIVATE KEY-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ................
        ................
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END RSA PRIVATE KEY-----
      2. server.crt 的內容會像如下的內容
        -----BEGIN CERTIFICATE-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ........
        ........
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END CERTIFICATE-----

步驟 4:修改 Apache 設定檔

  1. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 檔案
    1. 取消註解 LoadModule ssl_module modules/mod_ssl.so
    2. 取消註解 Include conf/extra/httpd-ssl.conf
  2. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-ssl.conf 檔案
    1. 將此檔中所有 _default_ 都改成 *
    2. 取消註解 SSLCertificateChainFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-ca.crt"

步驟 5:重新啟動 Apache22 服務

net stop Apache22
net start Apache22

雖然手續繁雜,但我已經簡化到不能再簡單了。因為這次的經驗讓我更加瞭解 Apache SSL 的設定方式,以後應該不會再遇到問題了。

  

此文章由 will 發表於 2008/9/26 上午 09:24:47

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: IIS | Security | Web

標籤: , ,

收藏:

CasPol.exe 程式碼存取安全性原則工具幾個常用的指令

程式碼存取安全性(CAS, Code Access Security)是 .NET Framework 中非常重要的一部份,不過我發現大部分的 ASP.NET 開發人員並不清楚 CAS 是什麼,因為在開發 ASP.NET 的時候很少有機會去碰觸到這一塊,最近我們工程師在用 .NET 寫一個 COM 元件時就發生了 CAS 的權限問題,導致程式無法正常執行的情況。

我這篇不會多講有關於 CAS 的觀念,請各位到 MSDN 的 .NET Framework 中的安全性 單元學習相關知識,或是購買書籍來看,例如:Microsoft .NET Framework 2.0 應用程式開發基礎 Ⅱ

底下是我整理的一些程式碼存取安全性原則工具 (Caspol.exe)常用的參數與使用的情境:

1. 查詢某個組件所屬的程式碼群祖(Code Group)

caspol -resolvegroup "C:\Program Files\MyApplication\MyApplication.exe"

2. 查詢某個組件所擁有的使用權限(Permission)

caspol -resolveperm "C:\Program Files\MyApplication\MyApplication.exe"

3. 設定某個組件為「完全信任」

caspol -addfulltrust "C:\Program Files\MyApplication\MyApplication.exe"

當不具有管理權限的使用者執行 Caspol.exe 時,除非指定 -machine 選項,否則所有選項都將參考使用者層級原則。當系統管理員執行 Caspol.exe 時,除非指定 -user 選項,否則所有選項都將參考電腦原則。

4. 新增一個程式碼群祖(Code Group)到本機電腦原則(Machine)

caspol -machine -addgroup All_Code -url \\myserver\sharefolder\* LocalIntranet 
       -name "My_Code_Group"

注意事項:執行這行的時候會出現以下提示訊息:

Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

執行的作業將會變更安全性原則。
您確定要執行這項作業嗎? (yes/no)
不過,你要輸入 y 才能過關喔!如果你輸入的是 yes 就會出現 "儲存原則已中止" 的錯誤訊息!

5. 列出本機電腦原則(Machine)所有的程式碼群組

caspol -machine -lg

    這行指令會列出所有本機電腦原則(Machine)中的所有程式碼群組,並以編號的方式呈現,如下:

Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

安全性為 ON
執行檢查為 ON
原則變更提示為 ON

層級 = Machine

程式碼群組:

1.  (等位) All Code: Nothing
   1.1.  (等位) 區域 - MyComputer: FullTrust
      1.1.1.  (等位) StrongName - 0024000004800000940000000602000000240000525341
31000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C9992
1EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05
ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC496
3D261C8A12436518206DC093344D5AD293: FullTrust
      1.1.2.  (等位) StrongName - 00000000000000000400000000000000: FullTrust
   1.2.  (等位) 區域 - Intranet: LocalIntranet
      1.2.1.  (等位) All Code: 相同的 Web 網站
      1.2.2.  (等位) All Code: 相同的目錄 FileIO - 'Read, PathDiscovery'
   1.3.  (等位) 區域 - Internet: Internet
      1.3.1.  (等位) All Code: 相同的 Web 網站
   1.4.  (等位) 區域 - Untrusted: Nothing
   1.5.  (等位) 區域 - Trusted: Internet
      1.5.1.  (等位) All Code: 相同的 Web 網站
   1.6.  (等位) URL - \\myserver\sharefolder\*: LocalIntranet
成功

6. 刪除第 4 點所新增的程式碼群組

    如同第5點所示,1.6 就是我們剛剛在第4點新增的程式碼群組,所以刪除的語法如下:

caspol -rg 1.6

7. 將最近儲存的本機電腦原則(Machine)原則復原。

caspol -machine -recover

這個程式碼存取安全性原則工具 (Caspol.exe)真的很複雜,上列的那些指令只是我認為比較有可能會用到的,其他更進階的設定除了上 MSDN 查看之外,可能也要 Try 一下才知道怎麼使用。

相關連結

  

此文章由 will 發表於 2008/9/7 下午 01:00:01

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | Security

標籤: ,

收藏:

介紹好用工具:KeePass Password Safe

我個人擁有好多好多組的帳號、密碼,個人用的、工作用的、幫別人記的、...真的很多(超過100組),雖然瀏覽器(Browser)可以幫你記憶許多組密碼,不過還是有許多密碼是跟瀏覽器無關的,例如:Windows 登入密碼、WiFi 登入密碼、銀行 ATM 密碼、...。面對這麼多的密碼,說實在的要全部記得還真不太容易呢!我想一般人的作法是將這些帳號、密碼紀錄在電腦裡,例如:Excel。但這其實資安的風險很大,若檔案不小心被有心人士或駭客取得,沒死也會重傷。

KeePass Password Safe

KeePass Password Safe 這套免費工具,可以幫你管理你所有任何形式的帳號、密碼,除此之外最重要的就是透過 KeePass Password Safe 所建立的密碼檔都是加密過的,而且還支援兩種加密方式:

  1. 一般密碼驗證(Master Password)
  2. 金鑰檔(Key File)

若使用 一般密碼驗證 + 金鑰檔 驗證的話,就可以讓你的密碼檔得到絕佳的安全性保護,就算密碼被別人猜出來,若沒有「金鑰檔」也無法開啟使密碼檔。

當你剛要建立密碼檔時,可以指定 Master Password 並勾選 Use master password and key file,然後在 Key File 欄位選取你的 key 要放在哪個路徑下,建議可以將金鑰檔放置在你隨身攜帶的 USB 磁碟上,這樣就算電腦被入侵沒有金鑰也無法破解該密碼檔。

 KeePass Password Safe - Create New Password Database - Set Composite Master Key

之後需要再輸入一次 Master Password

KeePass Password Safe - Create New Password Database - Repeat Master Password

然後點選 Use Mouse as Random Source 準備輸入亂數來源

KeePass Password Safe - Create New Password Database - Get Random Data for Key Generation

再來就是在 Random mouse input 的黑點區用滑鼠亂畫

KeePass Password Safe - Create New Password Database - Get Random Data for Key Generation

然後在 Random keyboard input 隨便輸入一堆亂碼後按下 OK 鍵,就會成功建立密碼檔了。

image

在使用上也挺方便的,我這邊講解幾個我常用的功能:

1. 用滑鼠雙擊 User Name 或 Password 欄位,即可自動將帳號或密碼複製到剪貼簿 10 秒鐘,時間到自動清除。

    KeePass Password Safe

2. 自動登入功能 ( Ctrl + V )

    例如我先連到金石堂的會員登入頁面,並將游標先放在「登入帳號」的欄位

    金石堂的會員登入頁面

    然後切換到 KeePass Password Safe 視窗,並在點選「金石堂 KingStone」項目後,按下 Ctrl + V 就可以自動幫你登入摟。

除此之外,KeePass Password Safe 還有許多好用的外掛程式可用喔,有時間的人自己去挖寶吧。

相關連結

  

此文章由 will 發表於 2008/9/3 下午 03:58:33

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Security | 介紹好用工具

標籤:

收藏:

介紹好用工具:FxCop ( 靜態程式碼分析 )

FxCop 是一種靜態程式碼分析工具,主要是用來分析採用 .NET 技術開發的組件(Assembly)品質,其中分析的規則也多達上百條(FxCop 1.36 預設有 197 種規則),並依照不同的領域分門別類,大致有以下類別:

  • 設計警告 ( Design Rules )
    支援 .NET Framework 設計方針所指定之正確程式庫設計的警告。
  • 全球化警告 ( Globalization )
    支援世界性程式庫和應用程式的警告。
  • 互通性警告 ( Interoperability )
    支援與 COM 用戶端互動的警告。
  • 維護性警告 ( Maintainability )
    維護性警告支援程式庫和應用程式維護。
  • 命名警告 ( Naming )
    支援遵守 .NET Framework 設計方針之命名慣例的警告。
  • 效能警告 ( Performance )
    支援高效能程式庫和應用程式的警告。
  • 可攜性警告 ( Portability )
    可攜性警告會支援各種不同平台的可攜性。
  • 可靠性警告 ( Reliability )
    支援程式庫和應用程式可靠性的警告,如正確的記憶體和執行緒用法。
  • 安全性警告 ( Security )
    支援更安全之程式庫和應用程式的警告。
  • 用法警告 ( Usage )
    支援適當使用 .NET Framework 的警告。

[ 以上資訊摘自 MSDN Managed 程式碼的程式碼分析警告 單元 ]

這些檢查規則(Rules)都是微軟在開發 .NET Class Library 時提出的各種程式設計的規範與警告,讓工程師們能夠寫出好用且易於維護的程式碼,FxCop 原意是要提供給開發類別庫(Class Library)的開發人員用的,只不過若一般的 .Net 應用程式也能夠遵照這些 Rules 開發的話,想必也能夠獲益良多,我覺得任何 .NET 工程師應該都要試試 FxCop 工具。

若要使用 FxCop 有幾個基本的步驟,如下:

1. 新增專案

Microsoft FxCop - New Project

2. 新增檢查目標,並選擇一個至多個 .NET 組件

Microsoft FxCop - Add Targets

3. 選擇要檢查的規則:在 FxCop 中雖然 Rules 這麼多,但如果全部都套用的話也其實不太實際,你可以選擇部分檢查規則就好,只要切換到 Rules 頁籤後,勾選你想要檢查的類別或特定項目即可。

Microsoft FxCop - Rules Tab

4. 按下 Analyze 按鈕進行程式碼檢查

Microsoft FxCop - Targets - Begin Analysis

5. 最後就是查看報表了,你可以在右側的檢查項目上選取 Properties 查看警告的詳細

Microsoft FxCop - Report

而在 Message Details 視窗裡有許多資訊可以查看,如下圖 Issues 頁籤可看到 Resolution (解決方式)

Microsoft FxCop - Message Details - Issues

Rule Details 提供了更詳細的說明

Microsoft FxCop - Message Details - Rule Details

Message 頁籤提供該條警告偵測到的方法(Method)

 Microsoft FxCop - Message Details - Message

Rules Support 頁籤提供了該條規則所提供支援訊息,其中 URL 的連結會連到 MSDN 看到該規則詳細的說明,而且是中文的喔!

Microsoft FxCop - Message Details - Rule Support

而最後的 Notes 可以讓 Code Review 的人員填入自己的筆記備查

Microsoft FxCop - Message Details - Notes

其他的部分就讓各位自己去發掘啦!

目前最新的 FxCop 是在 2008/8/13 發佈的 1.36 正式版,除此之外 FxCop 工具也早已整合進 Visual Studio Team System 產品中,在這次的 Visual Studio 2008 SP1 更新中也包括 FxCop 1.36 的更新。

備註:如果你之前已經安裝了FxCop 1.36 Beta 2,在安裝FxCop 1.36之前需要先解除安裝 Beta 2 才能安裝正式版。

相關連結

  

此文章由 will 發表於 2008/8/28 下午 02:40:44

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | C# | Security | 介紹好用工具

標籤:

收藏:

手動設定網址對應 IP 的方式

手動設定網址對應 IP 的技巧其實是很基礎的系統管理知識,不過好像還是有許多新手開發人員不知道可以這樣設定,今天我就來說說這個好用的技巧。

當我們網站建置完成後需要將程式與資料庫安裝到正式主機上,而通常都是先將程式、資料庫都設定正確,最後才是請系統管理員設定 DNS 讓 Domain Name 對應到正式主機的 IP,而設定 DNS 的過程通常會需要幾個小時的時間進行轉換,這導致我們很難立即透過「正式」的網址進行連線測試。

這問題尤其會影響到當我們使用 Google Maps API 開發的網站時,因為 Google Maps API 需要註冊一組 Registration Key,而這組 Key 是與 Domain Name 連動的,如果 DNS 遲遲沒設定完成,就很難自行測試或讓客戶來測試。當然,不只是 Google Maps API 會有這個問題,任何其他網站提供的 API 大多都是跟 Domain Name 做關連的。

除此之外,若公司內部採 NAT 架構連線上網的話,通常在內部架設的網站「對外」與「對內」的 IP 是不一樣的,如果系統管理員沒有將 DNS 設定好的話,你自己也可以透過修改 hosts 檔將對外的 Domain Name 改對應到內部的 IP 位址。

無論是 Windows 主機或 Linux 主機都有個 hosts 檔案,裡面定義著讓本機使用的 Domain Name <--> IP 對應表,任何程式在進行網路連線時通常會進行 DNS 伺服器進行 IP 的查詢,不過在查詢之前都一定會先來 hosts 檔查詢是否已經有定義過該 Domain Name 的對應 IP,如果沒有的話才會正式進行 DNS 查詢。

在 Windows 下通常 hosts 檔的路徑如下:

C:\WINDOWS\system32\drivers\etc\hosts

在 Linux 下通常 hosts 檔的路徑如下:

/etc/hosts

在 Windows 下的 hosts 檔案格式與 Linux 下的 hosts 檔案格式完全相同,以 Windows 為例,通常預設的內容如下:

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost

預設只會有一筆資料,也就是 localhost 對應到 127.0.0.1 (本機IP),這就是為什麼我們常常看到 localhost 的原因。

我們如果要新增新的 Domain Name <--> IP 對應,只要用記事本(Notepad)開啟該檔,並新增一行到最後面即可完成,第一欄輸入 IP 然後加些空白,再輸入 Domain Name 即可。例如:

10.0.0.55   testing.miniasp.com

除此之外也需要提醒各位,有些惡意軟體(malicious software)或病毒軟體(virus software)會直接修改你的 hosts 檔案,讓你的誤以為連到正常的網站,但事實上卻連到惡意的網站。例如說若有軟體將你的 hosts 修改成如下:

10.0.2.34   tw.yahoo.com

這樣你以後連到 http://tw.yahoo.com 就會改連到 10.0.2.34 這個 IP 了,這是個很危險的事,這樣的資安攻擊事件幾乎很難查詢異狀,所以定時檢查 hosts 檔案是有必要的。

  

此文章由 will 發表於 2008/8/25 上午 08:45:11

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux | Security | Web | 系統管理

標籤:

收藏:

使用 SecureString 類別保護你的字串值

我們其實可以透過許多工具取得 .Net 應用程式執行時在記憶體中的資料,例如:WinDbgDebug Diagnostic Tool。而當你在 .Net 程式中需要將一些較機密的資料暫存在變數(物件)時,若單純的使用 System.String 類別建立執行個體(Instance)儲存資料,就很容易被一些除錯工具或傾印(dump)工具取得原始資料,原因是 System.String 類別是不變的(immutable),且當不再需要它時也無法透過程式排程進行記憶體回收。所以當你使用 System.String 類別儲存文字內容在記憶體中,就很難保證在物件不用了之後能夠即時在記憶體中刪除,這樣的程式就有被資訊揭露(Information Disclosure)的安全風險。

如果你的 .Net 應用程式並非執行在自己所能管控的主機上,安全性的考量就更高了,這時你就可以考慮使用 SecureString 類別來保護你的字串值。而 SecureString 物件與 String 物件的相似之處在於他們儲存的資料都是字串值。不過,SecureString 物件的字串值會「自動加密」,而且你也可以在您的 .Net 應用程式中將物件標示為唯讀前進行修改,也可以由應用程式或 .NET Framework 記憶體回收行程將其從電腦記憶體中刪除,這樣就能夠確保你要存取的字串值在記憶體中也能夠受到保護。

因為最近在看 Windows PowerShell 實戰手冊 (Windows PowerShell in Action) 這本書,在第 523 頁提到了個 SecureString 類別,感覺蠻不錯的,所以推薦給大家知道。

相關連結

  

此文章由 will 發表於 2008/8/22 下午 12:38:10

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | Security

標籤: ,

收藏:

介紹好用工具:Streams 讓你瞭解神秘的 NTFS 檔案系統

Windows Sysinternals 工具組中的 Streams 可以讀取 NTFS 檔案系統中目錄或檔案的「替代資料串流(alternate data streams)」的資料,而這個 streams 真的是個「非常神秘」的東西。

「資料串流(Streams)」這個名稱我想大家一定覺得很抽象,在 NTFS 檔案系統中,目錄與檔案都是以資料串流的方式儲存,而預設的檔案內容就是儲存在「未命名資料串流」中,如果要在命令提示字元下取得「未命名資料串流」的資料,很簡單的就是利用 type 命令將資料取出,例如:

C:\>type C:\test.txt
123

或是

C:\>more C:\test.txt
123

而若要寫入或讀取「替代資料串流」的資料就可以利用一個冒號( : )加上一個鍵值(Key)進行存取。

例如你要寫入一個字串 ( Hello ) 到 C:\test.txt 檔案的「替代資料串流」中,並將這個「替代資料串流」命名為 TEST,就可以用以下語法寫入:

echo Hello > C:\test.txt:TEST

這樣子就可以將 Hello 字串(包括斷行)儲存到 C:\test.txt 檔案的「替代資料串流」中,而若你要將這個「替代資料串流」中的資料取出,可以用以下語法:

C:\>more < c:\test.txt:TEST
Hello

注意:你不能使用 type 命令將 C:\test.txt 檔案中的 :TEST 串流資料取出,因為 type 命令並不支援串流資料(stream)的讀取!若你有安裝 cygwin 的話,裡面的 cat 工具也可以讀取「替代資料串流」資料。

「替代資料串流」中的資料就如同「未命名資料串流」中的資料一樣,你想儲存什麼資料都可以,純文字、二進位資料都 OK 的,只是儲存在「替代資料串流」中的資料量大小,在使用檔案總管檢視的時候是不會被計算到的,如下圖示,我的 test.txt 內容有 3 個位元組(bytes),剛剛透過指令寫入 Hello 字串 + 斷行符號 + NULL 字元,一共 8 個 bytes 被寫入到  test.txt 檔案的 TEST 替代資料串流中,照理說這個檔案應該要佔用 11 個位元組(bytes)才對,但是在檔案總管中卻僅僅顯示 3 個位元組(bytes)而已。雖然這裡看不出來,但是磁碟的容量還是實際被佔用 11 個位元組(bytes)的!

 test.txt 內容

但你要如何才能看出你的檔案或目錄中有沒有任何「替代資料串流」的資料呢?預設來說 Windows 內建的所有工具或指令,沒有一個能夠查詢檔案中是否有「替代資料串流」資料。

這時,你是否有種心理涼涼的感覺?我剛瞭解到 streams 這個玩意的時候,覺得很恐怖勒!NTFS 檔案系統中竟然有個如此神秘的地方可以藏資料,而且還不會被發現!這就是為什麼當你在 C:\ 下按「全選」然後選「內容」計算檔案大小時,怎麼算都跟磁碟機的「已使用空間」不符,雖然這些神秘的資料並不全然都是儲存在「替代資料串流」中,但也有可能有些許資料藏在這裡。

若要查詢出檔案或目錄中是否有「替代資料串流」的資料,就只能靠 Windows Sysinternals 工具組中的 Streams 工具幫你檢視了,streams 的用法很簡單,如下:

C:\>streams

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: streams [-s] [-d] <file or directory>
-s     Recurse subdirectories
-d     Delete streams

當我們用 streams 工具查詢剛剛的 C:\test.txt 檔案時,就會查到該檔案中所有「替代資料串流」的所有鍵值:

C:\>streams test.txt

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\test.txt:
            :TEST:$DATA 8

你也可以利用 -s 參數掃瞄整個磁碟機中所有的目錄與檔案,看看到底有多少檔案或目錄有「替代資料串流」資料:

C:\>streams -s .

最後,我再分享一個小經驗,大部分人應該都曾經看過以下的安全性警告視窗吧:

安全性警告視窗

這是因為你透過 IE 線上下載 *.exe 的檔案(例如:putty.exe),IE 在開啟或儲存檔案的時候,就會幫你多加上一個「替代資料串流」資料,並且會將「替代資料串流」的鍵值取名為 Zone.Identifier,如下:

C:\>streams putty.exe

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\putty.exe:
   :Zone.Identifier:$DATA       26

若你將這個鍵值的內容取出,會發現以下資料:

C:\>more < putty.exe:Zone.Identifier
[ZoneTransfer]
ZoneId=3

而當你透過 streams.exe 工具用 -d 指令將 putty.exe 檔案的「替代資料串流」資料刪除後,就不會再出現這個畫面了。

C:\>streams -d putty.exe

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\putty.exe:
   Deleted :Zone.Identifier:$DATA

等一段時間後(大約幾十秒吧),你再透過檔案總管或捷徑啟動 putty.exe 就不會再有安全性警告的提示了。

相關連結

  

此文章由 will 發表於 2008/7/23 上午 09:38:10

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: Security | Tips | 介紹好用工具 | 系統管理

標籤: , , ,

收藏:

Google 推出 Open Source 的安全工具:RatProxy

最近 Google 推出一套免費的 Web 安全評估工具,叫做 ratproxy,這套工具可以檢測、分析您的網站是否有安全性漏洞或網頁是否有被入侵,目前可支援 Linux, FreeBSD, MacOS X, 與 Windows (Cygwin) 等執行環境(反正就是 Unix-like 的環境啦)。

RatProxy 可偵測到的漏洞包括 Cross-site Scripting (XSS, 跨網站指令碼)、指令碼惡意置入(script inclusion issues), 惡意網頁內容(content serving problems), insufficient XSRF 以及 XSS 防護(XSS defenses) 等。

若要在 Ubuntu 的環境下執行的話,必須要先安裝以下套件才能將 ratproxy 編譯成功:

apt-get install make gcc build-essential libssl-dev ca-certificates

下載、解壓縮、編譯:

wget http://ratproxy.googlecode.com/files/ratproxy-1.51.tar.gz
tar zxf ratproxy-1.51.tar.gz
cd ratproxy
make

編譯成功以後,就可以使用了,功能挺多的:

# ./ratproxy -h
ratproxy version 1.51-beta by <lcamtuf@google.com>
./ratproxy: invalid option -- h
Usage: ./ratproxy [ -w logfile ] [ -v logdir ] [ -p port ] [ -d domain ] [ -P host:port ] [ -xtifkgmjscael2XCr ]
-w logfile - write results to a specified file (default: stdout)
-v logdir - write HTTP traces to a specified directory (default: none)
-p port - listen on a custom TCP port (default: 8080)
-d domain - analyze requests to specified domains only (default: all)
-P host:port - use upstream proxy for all requests (format host:port)
-r - accept remote connections (default: 127.0.0.1 only)
-l - use response length, not checksum, for identity check
-2 - perform two, not one, page identity check
-e - perform pedantic caching headers checks
-x - log all XSS candidates
-t - log all directory traversal candidates
-i - log all PNG files served inline
-f - log all Flash applications for analysis (add -v to decompile)
-s - log all POST requests for analysis
-c - log all cookie setting URLs for analysis
-g - perform XSRF token checks on all GET requests
-j - report on risky Javascript constructions
-m - log all active content referenced across domains
-X - disruptively validate XSRF, XSS protections
-C - try to auto-correct persistent side effects of -X
-k - flag HTTP requests as bad (for HTTPS-only applications)
-a - indiscriminately report all visited URLs

由於 ratproxy 是屬「半自動」且「被動式」的偵測方法,使用 Proxy 的方式運作,並非主動連接到特定網站抓取所有網頁回來分析,所以啟動完該程式之後,會以 Proxy Server 的形式執行,你必須修改你瀏覽器的 Proxy 設定,將 Proxy 伺服器指定到 ratproxy 的 IP 與 Port(預設 ratproxy 啟動的 Port 埠號是 8080),才能讓 ratproxy 取得偵測的資訊,如下圖示:

修改你瀏覽器的 Proxy 設定,將 Proxy 伺服器指定到 ratproxy 的 IP 與 Port(預設 ratproxy 啟動的 Port 埠號是 8080)

若要啟動 ratproxy 伺服器,一段簡單的啟用指令如下:

./ratproxy -v /tmp/ratproxy -w ratproxy.log -d blog.miniasp.com -lextifscgjm -r

這代表你要將 ratproxy 服務啟動,預設監聽 Port 8080,並將偵測到的 Log 儲存在 /tmp/ratproxy/ratproxy.log 中,並且只分析連線到 blog.miniasp.com 網址的資料,並且將所有取得的網頁儲存成使用 -r 代表這個服務可以讓遠端主機使用(預設只會監聽 127.0.0.1 而已),如果你沒加上 -r 就無法用其他台機器連線。至於 lextifscgjm 這一串所代表的意義就請看 Help 說明吧。

最後,就是將取得的 ratproxy.log 產生報表網頁,並且查看你用 Browser 所逛過的網頁是否有潛在的安全風險或漏洞。你可以使用 ratproxy-report.sh 產生該網頁:

./ratproxy-report.sh ratproxy.log > report.html

產生的結果可以參考下圖:

ratproxy 分析結果報表預覽圖示

相關連結

  

此文章由 will 發表於 2008/7/5 上午 12:08:00

永久連結 | 評論 (5) | 此文章的RSSRSS comment feed |

分類: Linux | Web | Security

標籤: , , ,

收藏:

介紹幾款好用的 SQL Injection 偵測與防禦工具

微軟最近推出了兩套 SQL Injection 偵測與防禦工具,分別是 Microsoft Source Code Analyzer for SQL Injection (MSCASI) 與 URLScan 3.0

其中 Microsoft Source Code Analyzer for SQL Injection (MSCASI) 是專門用來分析早期 Active Server Pages (ASP) 程式中的 SQL Injection 漏洞,他會直接分析你的 ASP 原始碼並明確點出你的程式中潛在的 SQL Injection 漏洞在哪裡、潛在的風險、第幾行有問題等(如下圖)。如果你曾經寫過的 ASP 網站年久失修,建議你用這套工具執行看看是否有哪一段程式是有 SQL Injection 漏洞的。另外,微軟在前幾週也發表了一篇關於如何在 ASP 程式中防禦 SQL Injection 的建議( Preventing SQL Injections in ASP),而這套工具就是依據這篇文章中所寫的幾個規則進行 ASP 原始碼分析的。

Microsoft Source Code Analyzer for SQL Injection 執行畫面

由於 Microsoft Source Code Analyzer for SQL Injection 是指令列程式,你下載後只要解壓縮就能用了,用法很簡單,你只要執行 msscasi_asp.exe 就會出現使用說明了。

G:\asp>msscasi_asp.exe
Microsoft (R) Source Code Analyzer for SQL Injection Version 1.3.30601.30622
Copyright (C) Microsoft Corporation. All rights reserved.

Usage: msscasi_asp.exe [/nologo] [/quiet] [/suppress=num;..;num] [/GlobalAsaPath=
path] [/IncludePaths=path;..;path] /Input=file.asp

** msscasi_asp failure: no input file specified.

一次只能掃瞄一個檔案,底下是一個範例的用法:

msscasi_asp.exe /nologo /Input="c:\web1\test.asp"

你如果要掃瞄整個網站的 asp 程式你可以寫個批次檔來處理。

另一套軟體 URLScan 3.0 有別於已經推出五年之久的 UrlScan 2.5 版,功能多出了許多,他比較能夠主動偵測 SQL Injection 的攻擊,且目前也完整支援 IIS 7.0,不過未來這些掃瞄功能應該會直接整合進 IIS 7.0 中。

URLScan 3.0 版新增的功能有:

  • Support for query string scanning, including an option to scan an unescaped version of the query string.
  • Change notification for configuration (no more restarts for most settings.)
  • UrlScan can be installed as a site filter.  Different sites can have their own copy, with their own configuration.
  • Escape sequences can be used in the configuration file to express CRLF, a semicolon (normally a comment delimiter) or unprintable characters in rules.
  • Custom rules can be created to scan the URL, query string, a particular header, all headers or combination of these.  The rules can be applied based on the type of file requested.
  • Support for 64 bit IIS worker processes.

另外還有一套由 HP Web Security Research Group 發展出來的一個 SQL injection 偵測工具,叫做 Scrawlr 1.0,我覺得還挺酷的,用一個比較視覺化的方式偵測你的網站是否包含 SQL Injection 漏洞,只要輸入要檢測的網址,再按下 Start 按鈕就會開始跑了,非常的直覺、好用。如果你的網站被他抓到有漏洞的話,他還可以猜出你的資料庫名稱與相關資訊。

Scrawlr 1.0

相關連結

  

此文章由 will 發表於 2008/6/26 下午 07:02:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 介紹好用工具 | Security

標籤: , , , ,

收藏: