iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 10
0
Security

安全地寫 Java 的「基本功」系列 第 11

安全地寫 Java 的 「基本功」- Day 10

身份假冒(Spoffing identity)

身份假冒是由 認證(Authentication) 衍生出來的威脅,而認證的本質在於確認操作系統的那個人,或者是介接的另一個系統或服務,是不是正確的對象。因此,按照認證基本的三個條件:

  • 所知道的資訊
  • 所擁有的資訊
  • 所具備的生物特徵

身份假冒的攻擊,便從這三個認證機制層面進行破解。因此,你若用新電腦登入 LINE,它會叫你在手機上面輸入驗證代碼。這就是從這三個認證因子中,選取其中兩個進行認證,技術上稱為雙因子認證(2-Factors Authentication)

使用者登入是如此,服務跟服務、系統與系統之間,也是如此。軟體之間的認證使用帳號密碼,其實是蠻無意義的設計。要不者你要讓程式把密碼寫死,要不者每一次認證時,還得要有使用者來打密碼。系統之間的認證,大抵上會用像 IP、軟體憑證、機器的特殊識別碼(例如,MAC Address,但不適用於 VM),但系統之間進行假冒,坦白說,是比假冒使用者容易點,因為系統能夠提供的固定性資料,在某些情境下,很容易被冒用或盜取。雙因子認證的使用,就像你的摩托車用一個大鎖,再加一個指紋鎖鎖上,增加竊取者的難度,但面對功力夠高的有心人,你還是要提高警戒。

資料竄改(Tempering with data)

不知道你有沒有碰過,下載軟體回來之後,防毒軟體卻警報響起。我的確有一次碰過這樣的情況,那次似乎是因為該軟體的 FTP 被入侵,導致軟體檔案遭竄改,會散佈帶有病毒的程式。

資料竄改是針對 完整性(Integrity) 而來的攻擊,攻擊者之所以要竄改你的資料,或破壞你的系統的完整性,通常不會只是想要插旗那麼簡單。但當然,你有時候運氣好,碰上心腸好一點的,只是把一面討人厭的國旗插上去而已。資料竄改往往還會伴隨著木馬、綁架軟體等攻擊。

實務上怎麼預防呢?其實很多人知道,就是用雜湊驗證法,例如最最最傳統的,用 MD5 進行驗證。但我們來到 21 世紀,MD5 已經是過去式了。請改用 SHA256 以上的雜湊驗證吧!

否認(Repudiation)

通常攻擊者要發動攻擊,一定要能隱藏自己,不然他還是去 BlackHat 上上課,別急著想出名。為了不讓自己幹的好事,在別人的 Server 留下紀錄,能力強點的,臨走前會幫你把 Tomcat 的 log 以及 syslog 清一清。但你的電腦如果已經被人家 pwn root,那只好任人擺佈了。

否認的攻擊,即根基於對系統的日誌、軌跡等紀錄的攻擊行動。對於沒有做 log 的程式,或者 log 做得不確實的程式,要發動否認攻擊,的確是相對容一些。進一步來說,若依賴過於脆弱的認證機制或紀錄軌跡,也容易造成否認攻擊。例如,攻擊者可能用一個假的主機與 IP,又剛好你的電腦是在內網,那這樣出了事,沒人知道這個 IP 打哪來的。

但先說 log 的機制,我們在實務上,通常會採取分散風險的作法,除了 log 在自己電腦的檔案裡,還能放在資料庫。但其實可以透過 rsyslog 發送到別的主機。這樣,攻擊者要做些什麼時,他除非癱瘓每一台主機,入侵每一個節點,不然你一定能找出蛛絲馬跡來。

小結

我從來沒想過,只是攻擊手法的簡介,可以讓我寫了這麼多天。但也沒想過,原來帶小孩加上搬家是這麼累的事。但也因此,讓我回頭想想,當初希望寫下這些內容的原意,是希望能提供資訊界其他像我這樣非資安出身的工程師,一些基本的資安知識。

我們探討了三個攻擊手法,因此還有另外三個,希望明天可以將它們說明完成。資安的 CIA 與 AAA 就像白天,帶來光明,STRIDE 就像黑夜,有黑夜、有白天,這就是資訊人的日復一日。


上一篇
安全地寫 Java 的 「基本功」- Day 9
下一篇
安全地寫 Java 的 「基本功」- Day 11
系列文
安全地寫 Java 的「基本功」14

尚未有邦友留言

立即登入留言