跳到主要內容

發表文章

目前顯示的是有「Security」標籤的文章

Digest Authentication

Sequence Client對Resource發存取請求。 Server回應Header WWW-Authenticate: Digest realm、qop、nonce與Opaque。 Client以realm、nonce與Opaque做驗證。 Server回應驗證結果。 realm: 提示user此resource該輸入的account與password。 qop: quality of protection,決定驗證字串的表達方式。步驟二中,server應提供所支援的方式,包含auth與auth-int。 nonce: 用於某次請求的字串。可能是個timestamp。 opaque: 詳細用途不曉得。根據rfc2617中表達內容,像是一種server的metadata。 步驟三中,在給server request header中的response ,會根據qop而有所不同。可參考link中的Overview。另外附加的nonceCount與clientNonce,是由client所控制決定,用來避免Chosen Plaintext attacks。Server可根據內容決定驗證結果。 在spring-securiry-web 3.2.5版本中,僅支援qop=auth,其中nonceCount與clientNonce只要與response對得起來,並不會另外做特別驗證。 Client Tool的使用 cURL curl --digest -u "user:passwd" http: // request_url Postman 與cURL最大差別在於要發兩次request,一次是為了拿nonce,一次是驗證並拿回結果。 針對resource的URL發一次request。 從header內容中拿取realm與nonce。如果有opaque也要拿出來用。 填至Digest Auth表單中,並點擊Refresh headers。Postman會自動幫你算出response內容。 發出請求。 Reference Nonce Digest Access Authentication 用 PHP 實現 HTTP 身份驗證 HTTP Digest Authentication: Does the server store plaintext pas...

Burp suite - Frameable response (potential Clickjacking)

Introduction 這個弱點主要在講目標頁面是可以被iframe給引用,而存在Clickjacking的可能。這樣講或許很神,可以參考以下兩個連結: What is Clickjacking? 直接看畫面你就懂了。 Description How to fix? 要解決這個問題的方法,就是在response header引入X-Frame-Options: DENY,完全避免frame的使用方式;或者使用X-Frame-Options: SAMEORIGIN,讓只有same origin的網頁才能引用。 而我會特別整理這篇內容,主要是想了解到底REST API的情境下,是否需要處理這個問題。 OWASP REST Security Cheat Sheet 中其實有建議response header必須要包含X-Frame-Options: DENY,後來查了以下兩篇文章並獲得一些結論: Is it Meaningful to Add 'x-frame-options' in an Restful API? OWASP security guideline to protect restapi against clickjacking, are they acurate? 結論: REST API的內容還是有可能回應HTML,如果有HTML就存在Clickjacking風險。 加Header是為了通過vulnerability scan,給客戶完美的報表。XD~

如何使用root以外的使用者去執行service?

Problem 如果一個擁有root權限的App被攻破了,駭客就能為所欲為,對系統造成的危害肯定不小。所以怎麼樣的應用程式,就應該給予對應的存取權限,而不能因為方便直接給予最大權限。接下來就看看我Study結果吧! (本篇文章主要不是在教大家如何讓process變為service,而是著重於用怎樣的使用者去執行service的process) How to? 新增帳號與群組 | 修改目錄擁有者 | 移除帳號 如果沒有特殊需求,只需要透過以下指令就可以完成: # 新增群組 groupadd -r TonyApp # 新增系統使用者 useradd -r -d /opt/TonyApp -s /bin/bash -g TonyApp TonyApp # 將使用者設為daemon gpasswd -a TonyApp daemon 設定App目錄擁有者,原本如果是root,App可能會完全無法動: chown -R TonyApp:TonyApp /opt/TonyApp 強制移除root權限帳號: userdel -r -f TonyApp 更多權限的帳號 由於我的App會存取到硬體相關指令或裝置,如fdisk、/dev/mem,因此我必須給與對應的權限。我可以直接透過以下指令確認是否能執行: # 轉換使用者 su TonyApp # 測試指令 dmidecode fdisk /dev/sda 在賦與權限前,必然是不可行的。因此有以下幾個做法: 設定權限到system group 可以從/etc/group中得知有哪些對應的群組,也可以看 這篇文章 。如果要給予存取disk權限可以使用: gpasswd -a TonyApp disk 直接指定root並不代表它真的擁有存取所有東西的權限,最好也是根據你要什麼就設定什麼。測試到目前,就屬/dev/mem沒轍,因此才有其它的試驗。 指定uid為0 useradd -r -d /opt/TonyApp -s /bin/bash -ou 0 -g root TonyApp 如果使用ps aux去查service的process,會發現執行者是root。 setuid 如修改密碼的passwd一般,認何人都可以透過root權限去執行它。可以透過以下方是去做設定: chown 0:0 myprocess chmod +s mypr...

Support old ciphers in SSHD

Problem 最近在整理DRBL Server環境,發現在將Ubuntu從11.04升級到20.04後,舊的SSH client library發生了連線問題。糟糕的是,即使更新了這個library也無法解決問題。 How to resolve? 看到這個問題,我首先是先看看sshd的log,看有沒有蛛絲馬跡: 發現是由於找不到支援的cipher後,其實就2個做法: 換library,調整ssh client code。 調整ssh server cipher支援度。 最後考慮CP值,選擇省時的第二個做法。修改/etc/ssh/sshd_config,加入以下兩行: KexAlgorithms +diffie-hellman-group1-sha1 Ciphers +aes128-cbc 如果你的ssh server是會對外的,就請乾脆點,加強你client的cipher支援度吧! Reference How to enable diffie-hellman-group1-sha1 key exchange on Debian 8.0?