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