馬靜華 上海鐵路局收入稽查處
傳統(tǒng)的財會業(yè)務(wù)不斷向數(shù)字化方向轉(zhuǎn)變,審計對象擴展到了信息系統(tǒng)及系統(tǒng)中的數(shù)據(jù),這些變化對審計從業(yè)人員帶來了前所未有的挑戰(zhàn)。如何適應(yīng)新變化開展計算機環(huán)境下的審計工作成為了擺在審計人員面前一個急迫的現(xiàn)實問題。
審計工作的基本方式是審查和評價,即搜集證據(jù),查明事實,對照標(biāo)準(zhǔn),做出好壞優(yōu)劣的判斷。新形勢下要提高審計水平,就要在審計手段上有所突破,在傳統(tǒng)查證方法的基礎(chǔ)上不斷擴充新的技術(shù)手段。現(xiàn)場審計實施系統(tǒng)(AO)、“審計之星”等計算機審計系統(tǒng)的出現(xiàn),在信息系統(tǒng)審計數(shù)據(jù)審計方面邁出了實質(zhì)性的一步。但應(yīng)用程序?qū)徲嬜鳛樾畔⑾到y(tǒng)審計的另一重要領(lǐng)域,由于缺乏重視、工作難度大等原因,發(fā)展比較緩慢。
近年來蓬勃發(fā)展的軟件逆向工程技術(shù),為應(yīng)用系統(tǒng)審計,特別是閉源應(yīng)用系統(tǒng)的安全性審計提供了有效的技術(shù)手段,可以借鑒到信息系統(tǒng)審計工作中來。
信息系統(tǒng)審計是一個通過收集和評價審計證據(jù),對信息系統(tǒng)是否能夠保護資產(chǎn)安全和維護數(shù)據(jù)完整、使被審計單位的目標(biāo)得以有效實現(xiàn)和組織資源得到高效使用等方面作出判斷的過程。
自1960年代電子數(shù)據(jù)處理審計(EDP審計)出現(xiàn)至今,信息系統(tǒng)審計作為一門新興學(xué)科正日益成熟起來。廣義的信息系統(tǒng)審計對象涵蓋了企業(yè)中運行的供應(yīng)鏈管理、生產(chǎn)管理、財務(wù)管理、客戶關(guān)系管理等各類信息系統(tǒng)。通常所說的信息系統(tǒng)審計是狹義的概念,仍然屬于財務(wù)審計的范疇,其重點是對財務(wù)會計管理的信息系統(tǒng)進行審計[1]。
按照審計對象性質(zhì)的不同,信息系統(tǒng)審計可分為面向數(shù)據(jù)的審計和面向應(yīng)用程序的審計兩類[2]。面向數(shù)據(jù)的審計是以被審計系統(tǒng)中的數(shù)據(jù)為中心,通過對數(shù)據(jù)的采集、轉(zhuǎn)換、整理、分析和驗證,來判斷其與既定財會勾稽關(guān)系的符合程度,并運用查詢分析、數(shù)據(jù)挖掘等多種技術(shù)構(gòu)建模型進行數(shù)據(jù)分析,發(fā)現(xiàn)趨勢、異常和錯誤,從而收集審計證據(jù),以達成整體審計目標(biāo)。面向應(yīng)用程序的審計是對信息系統(tǒng)及其內(nèi)部控制措施以及信息系統(tǒng)生命周期進行的審計。應(yīng)用程序?qū)徲嫴粌H包括基礎(chǔ)設(shè)施,軟硬件管理,通訊網(wǎng)絡(luò)等與應(yīng)用程序運行密切相關(guān)設(shè)備設(shè)施和管理措施,還包含應(yīng)用程序的功能模塊的實現(xiàn)與處理規(guī)則、算法的合法性效益性、控制的執(zhí)行與效率,最終達到檢查與評價各種類型信息系統(tǒng)的合法性、安全性、可靠性和高效性的審計目的。
目前,受各種因素影響,信息系統(tǒng)審計很大程度上還局限于數(shù)據(jù)審計范疇,對應(yīng)用程序進行深入的查證分析面臨很多困難。
首先,應(yīng)用程序?qū)徲嬎璧闹R相對離散,除傳統(tǒng)的財務(wù)審計知識外,還需要很多計算機專業(yè)知識,應(yīng)用程序?qū)徲媽嵺`對操作系統(tǒng)原理、網(wǎng)絡(luò)通信原理、編程語言、軟件調(diào)試的要求相對較高。
其次,針對不同的信息系統(tǒng),審計人員需采用不同的技術(shù)手段。以代碼審計為例,Winform應(yīng)用程序的開發(fā)語言就有 ASM、C、C++、C#、Java等,審計時需要根據(jù)系統(tǒng)選用的語言和開發(fā)技術(shù),有針對性地分析,沒有通用的分析方法。個人掌握的知識終究有限,不可能全面覆蓋分析技術(shù),這增加了應(yīng)用程序?qū)徲嫷睦щy程度。
再次,信息系統(tǒng)審計人員缺乏進行系統(tǒng)審計所需的條件。目前應(yīng)用程序?qū)徲嫷沫h(huán)境還不成熟,進行審計工作還需解決很多實際的問題,最復(fù)雜的就是對閉源系統(tǒng)的運行邏輯分析。對系統(tǒng)的安全控制過程審計的比較高效的方式就是代碼審計,通過閱讀開發(fā)文檔和系統(tǒng)的源代碼,可以有效地找到系統(tǒng)中潛在的安全風(fēng)險。但是,實際工作中系統(tǒng)源碼和開發(fā)文檔屬于軟件開發(fā)商的核心機密,幾乎不可能公開,審計人員源碼和開發(fā)文檔可能性較少,只能通過現(xiàn)象分析或技術(shù)手段在較低層次進行系統(tǒng)執(zhí)行邏輯的查證。
逆向工程技術(shù)最早出現(xiàn)于工業(yè)領(lǐng)域,即根據(jù)已存在的產(chǎn)品,反向推出產(chǎn)品設(shè)計數(shù)據(jù)(包括各類設(shè)計圖或數(shù)據(jù)模型)的過程。軟件逆向工程(SoftwareReverseEngineering)由此發(fā)展而來,指從可運行的程序系統(tǒng)出發(fā),運用解密、匯編、系統(tǒng)分析、程序理解等多種計算機技術(shù),對軟件的結(jié)構(gòu)、流程、算法、代碼等進行逆向拆解和分析,推導(dǎo)出軟件產(chǎn)品的源代碼、設(shè)計原理、結(jié)構(gòu)、算法、處理過程、運行方法及相關(guān)文檔等[3]。通常,人們把對軟件進行反向分析的整個過程統(tǒng)稱為軟件逆向工程,把在這個過程中所采用的技術(shù)都統(tǒng)稱為軟件逆向工程技術(shù)。
3.2.1 信息系統(tǒng)審計使用軟件逆向工程技術(shù)應(yīng)實現(xiàn)的目標(biāo)
要明確逆向工程在信息系統(tǒng)審計中應(yīng)達到的目標(biāo),首先應(yīng)明確信息系統(tǒng)審計的職能。信息系統(tǒng)審計是對信息系統(tǒng)及其數(shù)據(jù)的真實性、安全性和績效性三方面進行分析和評價[4]。其中安全性審計是其他審計的基礎(chǔ)與前提,一個在安全方面存在嚴(yán)重問題和缺陷的信息系統(tǒng),它提供的數(shù)據(jù)不會真實可靠。企業(yè)的許多內(nèi)部控制機制已經(jīng)程序化、數(shù)字化、虛擬化以后,內(nèi)部控制與信息系統(tǒng)已經(jīng)成為相互融合的一個整體,這是內(nèi)部控制面臨的新問題,也是系統(tǒng)安全性審計的重點內(nèi)容。信息系統(tǒng)審計工作中采用軟件逆向工程技術(shù)進行軟件分析的主要目標(biāo)在于恢復(fù)軟件的數(shù)據(jù)訪問機制、用戶的身份認證機制以及權(quán)限控制機制的運作原理,并對系統(tǒng)及系統(tǒng)中數(shù)據(jù)的真實性、完整性、安全性、可靠性、保密性進行分析和評價。
3.2.2 軟件逆向工程應(yīng)用到信息系統(tǒng)審計中應(yīng)采用的主要技術(shù)
軟件逆向工程分析所使用的技術(shù)手段,一般分為靜態(tài)分析技術(shù)和動態(tài)分析技術(shù)兩種。
所謂靜態(tài)分析,即采用反匯編或反編譯等技術(shù)手段,得到對應(yīng)程序的近似代碼或匯編程序清單、并在其上分析程序流程,了解軟件功能[5]。動態(tài)分析技術(shù)是一種對目標(biāo)程序模擬執(zhí)行并進行跟蹤調(diào)試的技術(shù),其工具是軟件調(diào)試器程序。靜態(tài)分析是以程序為中心,動態(tài)分析是以輸入為中心。靜態(tài)分析只是通過目標(biāo)系統(tǒng)的代碼清單來推斷系統(tǒng)的行為,立足于分析人員對代碼清單的理解,與輸入無關(guān)。動態(tài)分析立足于用戶輸入和與之相應(yīng)的系統(tǒng)執(zhí)行過程的分析,不同的輸入可能得到不同的分析結(jié)果。動態(tài)分析對輸入的依賴導(dǎo)致動態(tài)分析的不完全,但同時也將程序的輸入、輸出和程序行為緊密地聯(lián)系起來。通過動態(tài)分析可以看到程序由于輸入的變化直接引起了程序的內(nèi)部行為和系統(tǒng)輸出的變化。不同的分析可以收集到不同的有用信息,先后執(zhí)行靜態(tài)分析和動態(tài)分析比單獨地執(zhí)行任一種分析更有效。因此,分析人員應(yīng)將這兩種方法結(jié)合使用以達到最好的分析效果。
對一個應(yīng)用軟件的逆向工程會涉及到軟件的多個模塊,由需求決定對軟件中某個或某些功能模塊進行調(diào)試。通常,一個完整的逆向工程分析過程一般應(yīng)確保經(jīng)過以下步驟:①通過閱讀用戶手冊、幫助信息、開發(fā)文檔等資料并結(jié)合實際運行操作,充分掌握系統(tǒng)的各項信息;②分析并去除軟件的保護措施;③恢復(fù)可執(zhí)行程序為程序清單;④進行靜態(tài)、動態(tài)分析;⑤記錄分析過程、編寫分析文檔。
破解一個軟件通常只需對其認證保護的功能模塊進行逆向分析,簡單地說只是對應(yīng)用程序做了一個局部檢查,而應(yīng)用程序?qū)徲媱t是全身體檢,這就要求我們在眾多的檢查內(nèi)容中找到最關(guān)鍵的部分進行重點檢查。每一個信息系統(tǒng)因其軟件架構(gòu)的不同各有薄弱環(huán)節(jié),要找到這些薄弱環(huán)節(jié)首先要弄清楚系統(tǒng)的架構(gòu)和運行模型。所以,審計人員對各種模塊進行逆向分析,首要的任務(wù)是梳理出整個軟件的架構(gòu)和系統(tǒng)運行模型。在此基礎(chǔ)之上,根據(jù)軟件架構(gòu)和運行模型的特點有針對性地選擇出需要重點分析的軟件模塊,并進一步對其運行細節(jié)進行分析查證,最終達成整體審計目標(biāo)。
隨著軟件逆向分析技術(shù)的不斷發(fā)展,逆向分析工具的功能越來越強大,可執(zhí)行文件被反編譯或反匯編后所得到的代碼清單可讀性越好,分析工作的難度大大降低。信息系統(tǒng)審計人員應(yīng)協(xié)助企業(yè)最大程度地做好信息系統(tǒng)的反調(diào)試保護,降低信息系統(tǒng)風(fēng)險。如果采用了合適的保護機制,如對程序集庫采用了加殼處理,反編譯軟件之前就必須先進行脫殼操作,這就增加了逆向工程分析的成本。審計人員無法去除的高強度外殼程序,不法分子進行逆向分析所需要的代價和技術(shù)要求會更高。無法查明的安全隱患被封裝在軟件中,其風(fēng)險程度將大大降低。
信息系統(tǒng)審計需要特別注意信息系統(tǒng)運行保護,如果對生產(chǎn)環(huán)境中的信息系統(tǒng)進行軟件逆向工程分析,有可能對信息系統(tǒng)造成意想不到的破壞。在目前各種系統(tǒng)廣泛集成和實時協(xié)作的信息系統(tǒng)審計環(huán)境下,一個系統(tǒng)的宕機有可能會對整個企業(yè)的生產(chǎn)經(jīng)營環(huán)境造成嚴(yán)重損失。可行之舉是先通過技術(shù)手段模擬出信息系統(tǒng)及其運行環(huán)境,在此基礎(chǔ)之上再進行逆向工程分析。比如所逆向的系統(tǒng)可架設(shè)在VMWare虛擬機上的模擬系統(tǒng),就不會對實際生產(chǎn)環(huán)境造成任何威脅。
信息系統(tǒng)審計中采用軟件逆向工程技術(shù)進行分析,會揭示出很多系統(tǒng)內(nèi)在的、不為人知的漏洞或弱點,從系統(tǒng)漏洞被發(fā)現(xiàn),到軟件開發(fā)商修補好漏洞的這段時間是一個真空期,這期間系統(tǒng)比任何時刻都更加脆弱容易受到攻擊。所以,對漏洞的細節(jié)披露需要慎重,不能過于詳細,要做到既能揭示問題,又無法輕易被不法分子利用。待系統(tǒng)升級后,方可公開有危險的漏洞細節(jié)。
軟件逆向工程技術(shù)一度被認為是軟件知識產(chǎn)權(quán)的嚴(yán)重威脅,提起逆向工程人們馬上就會聯(lián)想到軟件破解、注冊機、系統(tǒng)入侵等負面作用,其實,軟件逆向工程本身沒有善和惡的屬性,使用它的人最終決定了用途的正確與否。在信息系統(tǒng)審計中運用軟件逆向工程技術(shù),能夠解決其他審計方法所無法解決的問題,有其特殊的用途和特有的價值。