計算機相關專業實習報告作文

計算機相關專業實習報告
專業實習報告871279 朱育民一、工作內容這學期跟李錫捷老師實習,參加的工作專案是資訊保安組,因為平時較其它三位組員多接觸unix-like的環境,因此成為本組組長並協助聯絡事情。我們期國一開始便有正式的case接手,是一個韓國的駭客教育機構hackerslab委託翻譯他們的一份駭客教材。對於這方面,我們四人雖然很有興趣,但是相關的技術背景都還嫌不夠,因此做起來並不是很輕鬆,最常遇到的問題就是專業名詞的查詢與翻譯,常常會有不知如何是好的窘境發生,幸好繫上的學長大多能提供我們一些查詢的方向,大部分的問題到最後還是能順利完成,這樣初期的翻譯工作大約持續了一個多月後暫時結束。對外的case完成後,我們繼續朝著資訊保安相關的方向研究,主要是針對兩個程式進行改進工作,一個為測試系統漏洞的nessus,一個為偵測入侵系統snort,至此小組裡再以兩人一組細分為nessus組跟snort組,各自進行測試工作。我所分配的是nessus組,這是一種可以用來測試伺服器有哪些網路漏洞的程式,由於採用plug-ins的方式安裝,因此可以隨時安插新漏洞的測試plug-ins,加上nessus總部的cvs機制,只要你的nessus系統有定期cvs更新,就能保持最新的完整漏洞測試。在業界雜誌的評比裡nessus的評價甚至超越許多商用軟體(nessus是免費的),但是他有個小缺點,就是有關漏洞測試報告的部分作的並不是十分完整,每支漏洞的測試回報完整與否,取決於plug-ins作者是否有在寫作plug-ins加上完整的敘述與解決方案,問題是大部分的plug-ins都只有程式程式碼,並沒有對敘述及解決方式作批註說明,因此即使在使用nessus測出系統的安全漏洞後,使用者必須在到網路上搜尋解決方法,這樣作實在不是很便利,因此老師希望我們能對於nessus的測試回報部分作改良,寫出一個報告閱讀程式,結合龐大的資訊保安資訊,讓使用者能在檢測出漏洞的同時,直接取得相關的資訊和解決方案,便利系統管理者在改善本身系統安全的時效性。二、學習 hackers zone這學期最早接觸的學習環境,應該要算hackerslab提供的一個駭客練習用工作站free hacker zone。這是一臺用linux架起來的工作站,裡面分將使用者分作level0到level14,每取得下依個等級的使用者許可權,都有一個相對應的系統漏洞需要去破解,訓練使用者在實作中瞭解駭客破解系統的方法,我一面翻該組織的faq,一面嘗試錯誤,讓我一路攻到level10,其中學習到的手法包括了使用者許可權設定,尋找特定許可權的檔案,利用系統分隔符來欺騙系統,溢位攻擊等等,然而在前進level11時,因為該漏洞必須自韓國本地進行破解,因此只好作罷,沒能進一步繼續。不過這個經驗對於後來翻譯hackerslab的檔案有的不少的助益!erslab教材翻譯經過這段暖身後,我們正式接下hackerslab檔案翻譯的工作,我負責的是sniff(監聽)與網頁安全兩份教材。在乙太網絡上,只要是同一個lan上的機器,都能收到在lan上傳送的封包,系統核心會進行比對,如果該封包是屬於自己的就繼續處理,如果不是就忽略掉,而sniffing原理就是改變最後的步驟,將所有經過的封包,不管是否屬於自己,全部抓進來記錄。sniffing的正面意義應該是用於處理觀察網路流量狀況,一旦網路出現異常時,可以藉由sniffing來觀察有哪些異常封包,幫助排除異常狀況。至於竊取傳送中的使用者賬號跟密碼,則是cracker的行為,這並非sniffing的本意。對於區網內要如何避免被sniff,最簡單是在該區網內使用switch hub。跟hub不同的是,hub會將接收到的封包向所有連線的host傳送出去,但switch本身具有mac路由表的功能,可以記得哪一個mac地址要從哪一個連線埠送出去,因此不會讓不相關的host收到該封包,大大減少了被sniff擷取封包的機會。另外一種作法是對於傳送的封包均作加密處理,這樣就算被他人擷取到封包,對方也很難將封包解密而還原成原本的樣字加以解讀。常見的加密方式例如: ssl(secure socket layer)、pgp (pretty good privacy)、ssh (secure shell)、vpn (virtual private network)等等。sniff完最重要的工作是分析抓到的封包,因此這裡對於各種通訊協議的封包意義大致講解過一遍,例如該封包的來源與目的地,長度,資料內容,crc檢查碼等等。另外一個章節是有關網頁安全,包含了瀏覽器跟伺服器兩部分,這裡大多是講述理論性質的部分。首先是有關網頁伺服器,對於crack的問題,最重要的還是管理者(administrator)的認知問題,只要對系統的安全性隨時保持警覺,絕對能防止crack事件的發生。目前有關網路上的服務應用雖然對於ftp或e-mail,都有許多獨立的應用程式可以利用(如cute-ftp或outlook),但現在一般上網的使用者,仍有許多的機會直接使用網頁來對ftp做存取跟收發e-mail,此外還有許許多多功能,也都被整合在網頁瀏覽中,當網頁伺服器要兼任的服務越多,也就提供了更多讓cracker入侵的機會,這是發展網頁功能的同時必須付出的代價,因此,身為一個網頁伺服器的管理員,有責任負起保護自己伺服器使用者的權益,對於安全性一定要隨時保持高度的警覺性。尤其隨著電子商務的發展,網頁扮演的角色越來越吃重,在往夜間傳遞使用者資訊的機會越來越多,更增加了安全性的顧慮,然而使用者多半對於這方面安全性問題不夠警覺(甚至不瞭解嚴重性),只要有cracker使用一些惡意或欺騙的applet或scripts,就有可能將使用者的資訊竊取到手,也可以自遠端將使用者的計算機加以控制甚至令其當機,使用者對於瀏覽網頁時的安全比必須要比過去更加留意。常見的網頁攻擊模式包括:溢位攻擊(buffer overflow) :顧名思義, 就是利用 buffer overflow 的原理達成目的的......比如, 一個數組只有 100 bytes, 但我餵給它 200 bytes 的資料,於是這個陣列裝不下這些資料, 造成了 overflow......為什麼 overflow 會有 security hole 呢?首先, overflow 發生時, 多出來的資料會蓋到其它變數上,相信這一點大家早就知道了。問題是, 為什麼資料蓋到其它變數上時, 頂多使程式執行錯誤,會嚴重到出現 security 的問題嗎? 這時, 好玩的事情就發生了.......當我們呼叫一個 function 時, 以組合語言的觀點,會將 return address 堆入 stack 中。如果這個 function 宣告了一些 local 變數,那進入這個 function 之後, 會在 stack 中再空出一塊區域給這些 local 變數,當要從這個 function return 回去時, 就把這些在 stack 中的 local 變數清掉。現在好了, buffer overflow security hole 就是在這裡發生了.......如果有某個 function 宣告了一個 local array, 如:int func() { int i, j, k; char buf[16]; struct abc *x, *y, *z; . . .}這樣就很明顯了, 如果在這個 function 內有了 bug, 忘記去控制資料餵給 buf 的長度,當資料喂長一點, 就可以蓋到這個function 的 return address指到自己所喂進去的 code 上 這時, function 執行完畢, 要 return 時, 它就不會 return 到原來呼叫它的地方, 而會 “return” 到我所喂進去的那些 code,這麼一來入侵者就可以為所欲為了!denial of service ( dos ,阻斷服務攻擊) :所謂阻斷服務攻擊,是攻擊者利用受害者的作業系統、網路應用程式(服務)或網路通訊協議的漏洞來攻擊受害者,促使目標主機的系統或服務發生癱瘓的情況,可能造成系統資源耗盡、引響正常聯機品質、網路頻寬被佔滿、網路應用程式(服務)停止運作、系統當機等情形,使正當的使用者無法正常使用該主機所提供的服務。另一種情況是系統管理者為了測試目的嘗試對自己主機展開攻擊,測試作業系統或是網路應用程式(服務)中是否含有可能被攻擊的漏洞存在。像立駭科技(hackerslab)的入侵測試(penetration test)、衛道科技的網路安全漏空掃瞄儀(nai cybercop scanner)都可針對企業內的作業系統、網路甚至資料庫做健康檢查,其它dos的攻擊都是不合法的,而且動機通常出自惡意。distributed denial of service(ddos,分散式阻斷服務攻擊):所謂分散式阻斷服務攻擊,是運用在於受害者的系統資源、網路頻寬條件都比攻擊者來的好,如果攻擊者想一對一的攻擊被害者,可能會失敗甚至導致自己的系統或網路癱瘓,所以採取一對多的攻擊方式,攻擊者先在一些防備較弱的主機中種植攻擊程式。隨後攻擊者對各主機中的的攻擊程式發出攻擊命令,要求對目標主機發出龐大數量且多種的封包,龐大的資料量會癱瘓目標主機而使得無法正常提供服務。ddos不但可以提高成功率,還可以縮短攻擊的時間及減少被發現的機會。※以目前駭客的行徑而言,大多比較傾向於使用威力強大的ddos攻擊,尤其是針對規模大的網站時。 cgi :一種讓網頁執行外部程式的一種介面,正因為如此,只要許可權或設定有問題,或程式編寫有問題,很容易成為cracker入侵系統的快捷方式。自動目錄列表 : 取得網頁跟目錄下的檔案列表將使得cracker清楚知道該網站結構,很容易便能發覺後門所在甚至下載有問題的程式程式碼回去破解分析,對於入侵更為容易使用者認證的攻擊 : 利用一賬號檔案跟密碼字典檔案的配合,強制通過網頁認證的一種手法。3. nessusnessus官方網站 : ,目前最新釋出的版本為1.0.8,是一種用來偵測網路伺服器或工作站的網路漏洞的工具。這套偵測系統是client-server的方式運作,伺服器端包括了使用者賬號的管理以及各種漏洞測試的plug-ins,而client則利用伺服器端所提供的各種plug-ins來測試工作站或伺服器併產生報告,報告的格式包括了html、xml、nsr(nessus本身的存檔格式) 、txt、tex(latex格式)。其plug-ins自有一套語法叫做nasl(nessus attack scripts language),可以自訂對特定的連線埠進行封包測試,藉以判斷是否為漏洞(早期使用c語言來作為plug-ins的語法,但以被淘汰)一、安裝安裝的方式分為server跟client兩部分。首先server必須安裝在unix環境下,(已試過freebsd : ports安裝 跟linux : rpm安裝)這部分沒有什麼問題,裝下去就對了,接下來必須安裝plug-ins(若是不裝plug-ins,nessus什麼也不會測),plug-ins可以選擇一個一個下載後拷到指定目錄即可,不過正確的作法應該是使用cvs的方式來維護更新plug-ins的版本。cvs系統又分作current跟stable兩種,stable版本但講究穩定,許多新釋出的plug-ins並沒有包括在裡面,而current雖然有最新的plug-ins,但測試不見得穩定正確,有可能將你的受測工作站或伺服器損害,因此要使用那個版本請自行斟酌。安裝方式如下:1. 設定環境變數 登入cvs系統 密碼為 “ anon” ,只有第一次登入會需要密碼,以後會自動記載你係統的某一個地方$ cvs login3-1. 如果要抓取nessus程式stable版本$ cvs -z3 checkout -rnessus_1_0 nessus-libraries$ cvs -z3 checkout -rnessus_1_0 libnasl$ cvs -z3 checkout -rnessus_1_0 nessus-core$ cvs -z3 checkout -rnessus_1_0 nessus-plugins3-2. 如果要抓取nessus程式current版本$ cvs -z3 checkout nessus-libraries$ cvs -z3 checkout libnasl$ cvs -z3 checkout nessus-core$ cvs -z3 checkout nessus-plugins4. 以後要檢查更新部分時只要打$ cvs -z3 update -p nessus-libraries$ cvs -z3 update -p libnasl$ cvs -z3 update -p nessus-core$ cvs -z3 update -p nessus-plugins完成!!nessus是一套強大的漏洞測試工具,但是對於他產生的報告不夠完整是它的一大致命傷,目前他所採行的方法是把漏洞報告及修補漏洞的方法寫死在plug-ins裡,但並不是每一個plug-ins撰寫者都有寫上修補方式這部分的說明,因此我們的目的是寫一個report reader來讀取nessus所產生的報告並自動補上漏洞相關的網址(報告格式為html或xml),補強的方式是連結cert的搜尋器來產生,目前遇到的問題在於我們要選擇哪一種語法來寫這支report reader的程式(vb除外),也使我們的研究主題由nessus暫時轉到了程式語言的部分,因此nessus暫時在此打住pts language 截至目前為止,我們嘗試過的語言tcl、perl、python都是屬於scripting languages,他們跟c或java這種system programming languages有很大的差異。sl 會有一組派得上用場的元件 (component) ,用別的語言寫成。sl 不會從頭開始,而是結合已經寫好的元件。比方說,tcl 跟 visual basic 可以用來管理使用者介面元件,而 unix shell script 可以把元件當作 "filter" ,來組成一條 "生產線" ,製造所要的資訊。 sl 可以用來擴充套件已經存在元件的功能,而很少用來發展複雜的資料結構、演算法。這些東西應該由元件提供。因此,sl 常被稱為 "黏接語言" 或者 "系統整合語言"。為了簡化組合元件的工作,sl通常沒有型態。所有東西看起來,用起來都一樣,也可以交換著用。比方說,在tcl 或 vb 中,同一個變數既能存字串,又能存整數。而程式程式碼跟資料可以互通,因此能夠線上產生新程式。由此可以看到sl 對於文字資料的處理蠻擅長的。v像這樣無型態的語言更容易結合元件。因為它並不對 "東西該如何使用" 做任何限制。元件會怎麼用,搞不好連原先的設計者都不清楚。換句話說,元件的使用是有彈性的,不同狀況下有不同用法。對於scripts language有點概念以後,我們決定選取perl跟python兩方面進行,以tk模組作圖形化介面,正在鑽研當中,目前以perl/tk較有進度(簡清岱主打)(因為有花錢買書…沒錢:~~ ),python相關書籍也將入手,目前找到的檔案教學,主要都以數學運算的應用為例子(python的數學函式支援很豐富,一進python的console下就可以當成一臺超強的計算器來用了),近程階段目標是寫出圖形化的小算盤出來。目前語言學習部分到此為止三、自我評估及心得感想 對於這學期的實習成果,自己感覺並不是很滿意,因為一開始的hackerslab最近產生新的問題,必須要整份重弄,令人感到有點恐懼。再者,由nessus延伸出來的scripts language學習,也是沒有突破性的進度,最近即將面對的新挑戰---pda程式設計比賽,更因為各種原因而遲遲沒犯法開始進行進一步的討論與動作,整體來說,給自己打50的不及格分數… 感想方面,真的覺得專業實習壓力比課業還來得大,尤其是每個禮拜都會有的meeting,看到大家每次meeting都跟上衣次比有所進步的樣子,就更感到壓力,總覺得自己還要在多學習才不會被別人趕過去。四、對繫上的建議 以往聽學長姐的經驗,對於專業實習期望頗高,總覺得能因為專業實習對於自己的實力大大提升,但是這一屆校內專業實習的人數超越以往,而就我所認識的校內實習同學們,大多數都是虛晃一學期,因此建議對校內實習的人數能有所限制,另外,對於郭姐對實習相關的訊息一而再再而三的提醒表示感謝!!謝謝郭姐這學期為我們的辛苦!!