# Secure Coding (返回[2016年暑期系統軟體課程:台南場次](https://hackmd.io/EwZg7AbALAjArADgLSShJUBGECcSEAME6uYmB2OAplAGa1A)) ## 資訊安全議題 * [Hacking the D-Link DIR-890L](http://www.devttys0.com/2015/04/hacking-the-d-link-dir-890l/) * [What the Ridiculous Fuck, D-Link?!](http://www.devttys0.com/2015/04/what-the-ridiculous-fuck-d-link/) * [MS15-034/CVE-2015-1635 HTTP 遠端程式碼執行漏洞分析](http://blogs.360.cn/blog/cve_2015_6135_http_rce_analysis/) ## 案例探討:豐田汽車死亡車禍 * 美國 Carnegie Mellon 大學 Phil Koopman 教授在 2014 年製作一份簡報 「[A Case Study of Toyota Unintended Acceleration and Software Safety](http://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_slides.pdf)」,探討豐田汽車(Toyota Motor)在美國捲進了一樁官司背後的工程議題,涵蓋 real-time scheduling 和軟體可靠性 * 豐田一款 2005 年份 Camry 車款在 2007 年,於美國奧克拉荷馬高速公路上發生的一場暴衝死亡車禍,肇因於該車款內的電子節流閥控制系統軟體發生錯誤,內部的錯誤碼就是造成車輛無預警暴衝的原因。 * [汽車電子缺陷導致事故?豐田在美惹官非](http://www.eettaiwan.com/ART_8800691341_622964_NT_9cc6a57b.HTM) * [不良軟體碼可能殺人嗎?答案是肯定的,而且悲劇顯然已經發生](http://www.eettaiwan.com/ART_8800691385_480202_NT_bd47ba6a.HTM) * 2011 年,包括 Barr Group 四位專家在內的一個七人小組接手先前 NASA 為期 10 個月的調查任務,深入分析了發生事故的豐田汽車,並做成了一份長達 800 頁的調查報告。首先,檢視車用系統的即時作業系統,找出未受保護的 critical variables,且發現了電子節流閥故障安全機制中的漏洞與缺陷。 * 該專家小組採用 Green Hills 模擬器進行了模擬,透過車輛測試,那些我們所發現的缺陷確實與無預警暴衝有關,對照檢視了汽車黑盒子內的軟體碼,發現它會錯誤記錄車輛意外前最後幾秒的駕駛人動作資訊。針對 2005 年份的 Camry L4 車款原始碼以及車內測試,證實其中有部分關鍵變數並未受軟體保護,記憶體崩潰的原始碼也顯現,stack overflow 與軟體錯誤導致記憶體崩潰,而問題的關鍵就在於那些記憶體崩潰,從而擦槍走火。 * 軟體缺失導致重大災難的例子比比皆是,像是: * 1980 年 (冷戰時期),北美防空聯合司令部曾告警,美國遭受導彈襲擊,差點釀成第三次世界大戰。後來證實,這是反饋系統的電路故障問題,但反饋系統軟體並未考慮故障問題引發的誤報 * 1996 年 6 月 4 日,Ariane 5 型運載火箭的首航,原計畫將四顆太陽風觀察衛星運送到預定軌道,但因軟體引發的問題,導致火箭在發射 39 秒後偏軌,從而觸發火箭的自我摧毀裝置。此事件肇因於一系列的 Ada 程式碼錯誤,造成高達 3.7 億美元的損失 [Top 10 Secure Coding Practices](https://www.securecoding.cert.org/confluence/display/seccode/Top+10+Secure+Coding+Practices) * **Validate input** * **Heed compiler warnings** * **Architect and design for security policies** * **Keep it simple** * **Default deny** * **Adhere to the principle of least privilege** * **Sanitize data sent to other systems** * **Practice** **defense in depth** * **Use effective quality assurance techniques** * **Adopt a secure coding standard** [SEI CERT Coding Standards](https://www.securecoding.cert.org/confluence/display/seccode/SEI+CERT+Coding+Standards) ## MISRA C * 1990 年代早期,英國政府啟動名為 "SafeIT" 的計畫,專注於安全和高可靠相關的電子系統,隨後轉型為專注於嵌入式系統安全的 MISRA (汽車產業軟體可靠協會),後者一開始主要是針對汽車產業,不過其他產業也逐漸開始使用MISRA 的成果和規範:包括航太、電信、國防、醫療設備、鐵路等領域中都已有廠商使用 * MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》是在1998年發行,一般稱為MISRA-C:1998。MISRA-C:1998有127項規則,規則從1號編號到127號,其中有93項是強制要求,其餘的34項是推薦使用的規則 * 在2004年時發行了第二版的MISRA C的第一版《Guidelines for the use of the C language in critical systems》(或稱作MISRA-C:2004),其中有許多重要建議事項的變更,其規則也重新編號。MISRA-C:2004有141項規則,其中121項是強制要求,其餘的20項是推薦使用的規則。規則分為21類,從「開發環境」到「運行期錯誤」。 * 規則舉例 * MISRA-C:2004的規則12.10為「不要使用逗號運算符」,也可以用其他方式達到一樣的效果 * 動態分配記憶體功能是C語言的一大特色,可以在運行期依實際需求用 malloc 分配記憶體,在不使用此記憶體時再用 free 歸還,但許多問題也和未正確處理動態分配記憶體功能有關,例如MISRA-C:2004 的規則 20.4 為「不能使用動態 heap 的內存分配」,限制 malloc、free 的使用。 [Secure Programming in C](http://web.mit.edu/6.s096/www/lecture/lecture03/secure-C.pdf) [IA32 Linux Buffer Overflow](https://d396qusza40orc.cloudfront.net/hardware/lecture_slides/tutorials/buffoverflow.pdf) [Lab43: Runtime Behavior](http://wiki.csie.ncku.edu.tw/embedded/Lab43)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up