《基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究》8700字(論文)_第1頁
《基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究》8700字(論文)_第2頁
《基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究》8700字(論文)_第3頁
《基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究》8700字(論文)_第4頁
《基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究》8700字(論文)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證研究摘要MySQL數(shù)據(jù)庫的運(yùn)用越來越廣泛,因而其的取證工作也變得越來越重要。在公安工作中,電信詐騙以及其它需要數(shù)據(jù)庫取證的案件,存在著數(shù)據(jù)庫中數(shù)據(jù)丟失或是被故意刪除的現(xiàn)象,因此首先要進(jìn)行數(shù)據(jù)庫的數(shù)據(jù)恢復(fù),再進(jìn)行數(shù)據(jù)庫取證。涉案數(shù)據(jù)庫中蘊(yùn)含了大量證據(jù),而數(shù)據(jù)庫具有記錄對其采取何種操作的日志,因此,對數(shù)據(jù)庫日志的提取是數(shù)據(jù)庫取證中最關(guān)鍵的一步。本文研究并分析了MySQL的日志,MySQL日志中記錄了用戶對數(shù)據(jù)庫數(shù)據(jù)的更改操作,通過確定事件的偏移值范圍,并進(jìn)一步核實(shí)偏移范圍,可以實(shí)現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的恢復(fù)。實(shí)驗(yàn)結(jié)果表明:通過利用二進(jìn)制日志恢復(fù)數(shù)據(jù),實(shí)現(xiàn)基于事件的偏移值(log_pos)的MySQL數(shù)據(jù)庫恢復(fù),能夠很好的保證數(shù)據(jù)的完整性。通過研究分析MySQL日志,可以對數(shù)據(jù)庫的關(guān)鍵數(shù)據(jù)進(jìn)行恢復(fù),進(jìn)而完成取證,最后根據(jù)這些證據(jù)來確定犯罪過程、犯罪動機(jī)。關(guān)鍵字:數(shù)據(jù)庫;日志;數(shù)據(jù)恢復(fù);偏移量;偏移范圍目錄1引言 11.2國內(nèi)外研究現(xiàn)狀 11.2研究目的和意義 22MySQL日志 32.1錯(cuò)誤日志 32.2慢查詢?nèi)罩?42.3通用查詢?nèi)罩?62.4二進(jìn)制日志 82.5mysqlbinlog工具 112.6本章小結(jié) 123基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證 133.1二進(jìn)制日志詳細(xì)解析 133.2實(shí)驗(yàn)測試 163.3本章小結(jié) 194結(jié)語 20參考文獻(xiàn) 21

1引言隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,信息已成為當(dāng)今社會各種社會的核心資源。通過對這些信息資源的進(jìn)一步開發(fā)利用,人們可有效較低相應(yīng)活動的成本,各種社會資源得到最大限度節(jié)約和合理運(yùn)用。而這其中起到基礎(chǔ)和核心作用的就是數(shù)據(jù)庫。數(shù)據(jù)庫,簡單地說就是數(shù)據(jù)的倉庫,即數(shù)據(jù)存放的地方。在現(xiàn)實(shí)世界中,存在許多數(shù)據(jù)庫的例子,如手機(jī)通信錄是一個(gè)關(guān)于聯(lián)系人信息的小型數(shù)據(jù)庫,圖書館則是一個(gè)各類館存圖書的大型數(shù)據(jù)庫。小型數(shù)據(jù)庫尚可用手工管理,而大型數(shù)據(jù)庫必須由計(jì)算機(jī)輔助管理。隨著互聯(lián)網(wǎng)的快速發(fā)展,數(shù)據(jù)庫系統(tǒng)在多個(gè)領(lǐng)域廣泛應(yīng)用,數(shù)據(jù)量也急劇增長。數(shù)據(jù)庫中存放著用戶的大量信息,這些信息中可能含有用戶的隱私,所以數(shù)據(jù)庫系統(tǒng)保護(hù)變得日益重要。同樣這使得數(shù)據(jù)庫面臨著越來越多的威脅,經(jīng)常有關(guān)于用戶資料被泄露的事件發(fā)生,一些企業(yè)的數(shù)據(jù)庫被攻擊,使得對于數(shù)據(jù)庫系統(tǒng)取證的研究變得越來越迫切和重要。MySQL數(shù)據(jù)庫是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),運(yùn)用最常用的數(shù)據(jù)庫管理語言—SQL進(jìn)行數(shù)據(jù)庫管理。MySQL是開放源代碼的,因此任何人都可以在經(jīng)過許可的前提下下載并依據(jù)需要對其進(jìn)行修改。MySQL日志中記錄了用戶對數(shù)據(jù)庫數(shù)據(jù)的更改操作,通過研究分析MySQL日志功能,可以對數(shù)據(jù)庫的關(guān)鍵數(shù)據(jù)進(jìn)行取證。1.2國內(nèi)外研究現(xiàn)狀譚森在《基于日志分析的MySQL數(shù)據(jù)庫取證算法研究》[2],編程實(shí)現(xiàn)了基于日志分析的MySQL數(shù)據(jù)庫日志文件,研究出能夠自動查找MySQL數(shù)據(jù)庫日志文件,可以對MySQL數(shù)據(jù)庫進(jìn)行取證的系統(tǒng),解決了MySQL數(shù)據(jù)庫的非法修改取證問題。宋蕾和張培晶在《數(shù)據(jù)庫系統(tǒng)取證研究》中[1],對目前較為主流的數(shù)據(jù)庫SQLServer和Oracle進(jìn)行了相應(yīng)討論。文章對數(shù)據(jù)庫的存儲結(jié)構(gòu)、數(shù)據(jù)庫電子證據(jù)收集范圍和次序、數(shù)據(jù)庫系統(tǒng)相關(guān)電子證據(jù)收集。最后得出不同數(shù)據(jù)庫系統(tǒng)的存儲結(jié)構(gòu)和工作原理存在一定的差異,需要工作人員依據(jù)被調(diào)查數(shù)據(jù)庫系統(tǒng)的具體情況進(jìn)行針對性的數(shù)據(jù)庫取證。在《Generalizingdatabaseforensics》中[3],介紹了對以前建議的數(shù)據(jù)庫篡改法分析方法的改進(jìn),引入了基于頁面的分區(qū)以及基于屬性的分區(qū)及其關(guān)聯(lián)的損壞圖,比較了所有法證分析算法的結(jié)構(gòu),并討論了與法證分析有關(guān)的各種設(shè)計(jì)選擇,介紹了新引入的算法的取證成本,比較了其取證成本,結(jié)果是這些算法的泛化和數(shù)據(jù)庫取證分析過程的總體特征,從而為所有現(xiàn)有的取證分析算法提供DBMS總體操作中的上下文。在《ResearchonApplicationofDatabaseForensicsTechnology》中[4],在具體數(shù)據(jù)庫產(chǎn)品的基礎(chǔ)上,給出了常見的數(shù)據(jù)庫攻擊行為,分析了數(shù)據(jù)庫中可能的跟蹤,并總結(jié)了證據(jù)收集的范圍和常用的分析方法。1.2研究目的和意義數(shù)據(jù)庫中的數(shù)據(jù)是在案發(fā)現(xiàn)場中至關(guān)重要的證據(jù),其中蘊(yùn)含著大量的犯罪信息。在多數(shù)案發(fā)現(xiàn)場大都存在計(jì)算機(jī)設(shè)施,可以在計(jì)算機(jī)中的數(shù)據(jù)庫提取出大量的數(shù)據(jù),通過對數(shù)據(jù)的分析,可能判斷出作案人的作案動機(jī),進(jìn)而印證證人、被害人的陳述以及犯罪嫌疑人的辯解和供述是否正確和真實(shí)有效,進(jìn)而提高證據(jù)的證明能力。本課題研究了一種基于偏移值的恢復(fù)數(shù)據(jù)庫的方法,通過確定偏移值范圍、核實(shí)偏移范圍來實(shí)現(xiàn)對數(shù)據(jù)庫的恢復(fù)。在案發(fā)現(xiàn)場的數(shù)據(jù)庫蘊(yùn)含了大量的證據(jù),通過對這些證據(jù)進(jìn)行恢復(fù)、分析,可以根據(jù)這些證據(jù)回溯犯罪過程并固定證據(jù)。

2MySQL日志不同數(shù)據(jù)庫的日志文件存在差異[5]。日志文件記錄了在數(shù)據(jù)庫運(yùn)行的各種操作,因此可以通過日志查看數(shù)據(jù)庫中發(fā)生過的事件。在MySQL數(shù)據(jù)庫中有錯(cuò)誤日志(ErrorLog)、慢查詢?nèi)罩荆⊿lowQueryLog)、通用查詢?nèi)罩荆℅eneralQueryLog)和二進(jìn)制日志(BinaryLog),這些日志文件中分別記錄著MySQL數(shù)據(jù)庫在不同方面的日志數(shù)據(jù)。錯(cuò)誤日志、慢查詢?nèi)罩竞屯ㄓ貌樵內(nèi)罩镜母袷蕉际俏谋靖袷?,可以直接查看,而二進(jìn)制日志與其它三種不同,二進(jìn)制日志是用二進(jìn)制記錄的,不能直接查看。2.1錯(cuò)誤日志錯(cuò)誤日志是這四種日志中最常用的一種日志,記錄了MySQL數(shù)據(jù)庫每次啟動和關(guān)閉的詳細(xì)信息以及運(yùn)行過程中所有較為嚴(yán)重的警告和錯(cuò)誤信息。如果MySQL數(shù)據(jù)庫發(fā)生故障無法正常啟動時(shí),可以首先查看錯(cuò)誤日志,從中找到服務(wù)器無法正常啟動的原因。錯(cuò)誤日志的特性在Unix系統(tǒng)和Windows系統(tǒng)中會有不一樣的處理方式。2.1.1Unix系統(tǒng)中的錯(cuò)誤日志在Unix系統(tǒng)上,如果MySQL數(shù)據(jù)庫通過mysqld程序啟動,錯(cuò)誤日志是不會開啟的。在錯(cuò)誤日志沒有開啟的時(shí)候,本來是記錄在錯(cuò)誤日志中的信息會輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出之中。用戶如果要開啟MySQL數(shù)據(jù)庫中的錯(cuò)誤日志功能,可以在MySQL數(shù)據(jù)庫的配置文件中配置-log-error參數(shù),也可以通過配置-log-error參數(shù)來確定將錯(cuò)誤日志寫入控制臺或文件。如果-log-error沒有給出,錯(cuò)誤日志將被寫入控制臺。如果-log-error命名文件,錯(cuò)誤日志將被寫入該.err數(shù)據(jù)目錄下的該文件。2.1.2Windows系統(tǒng)中的錯(cuò)誤日志在Windows系統(tǒng)中錯(cuò)誤日志一般保存在MySQL數(shù)據(jù)庫指定的data目錄下,默認(rèn)名稱為host_name.err。其中,host_name表示MySQL服務(wù)器的主機(jī)名。在MySQL配置文件中,錯(cuò)誤日志所記錄的信息可以通過log-error和log-warnings來定義。log-error表示是否啟用錯(cuò)誤日志功能和錯(cuò)誤日志的存儲位置,log-warnings表示是否將警告信息也記錄到錯(cuò)誤日志中。執(zhí)行命令:showvariableslike‘log_error’;此命令可以查看錯(cuò)誤日志文件所在的目錄及文件名信息。從圖1中可以看出錯(cuò)誤日志文件存放的置.\LAPTOP-NPVE9FHA.err,從log_error的值可以看出這是一個(gè)相對文件名,該錯(cuò)誤日志文件是存放在數(shù)據(jù)目錄下的,它的文件名為LAPTOP-NPVE9FHA.err。圖1錯(cuò)誤日志信息2.2慢查詢?nèi)罩韭樵內(nèi)罩?,從字面意思來看就是查詢慢的日志,它是用來記錄MySQL中響應(yīng)時(shí)間超過long_query_time參數(shù)設(shè)定的時(shí)間閾值的SQL語句的日志。在默認(rèn)情況下,不記錄管理語句,也不記錄不使用索引進(jìn)行查找的查詢。如果long_query_time的設(shè)定值為10,那么意思就是MySQL記錄所有執(zhí)行超過10S以上的SQL語句,但對于運(yùn)行時(shí)間正好等于10S的情況,并不會被記錄下來。一般情況下,慢查詢?nèi)罩镜哪J(rèn)名稱為host_name-slow.log,host_name表示MySQL服務(wù)器的主機(jī)名。在默認(rèn)情況下,慢查詢?nèi)罩疽话闶遣婚_啟的,需要手動設(shè)置來開啟,但是并不建議啟動慢查詢?nèi)罩?,因?yàn)殚_啟慢查詢?nèi)罩緯π阅軒硪欢ǖ挠绊憽?.2.1慢查詢?nèi)罩鞠嚓P(guān)命令執(zhí)行命令:showvariableslike‘%long_query_time%’;此命令能夠用來查詢慢查詢?nèi)罩鹃撝怠H鐖D2,表示慢查詢?nèi)罩鹃撝禐?0S。圖2慢查詢?nèi)罩拘畔?zhí)行命令:showvariableslike‘slow_query_log%’;此命令可以查看慢查詢?nèi)罩疚募南嚓P(guān)信息。由圖3可知,慢查詢是開啟的,其文件名為LAPTOP-NPVE9FHA-slow.log。圖3慢查詢?nèi)罩拘畔?.2.2慢查詢?nèi)罩竟δ苈樵內(nèi)罩居涗浿枰荛L時(shí)間才能執(zhí)行完畢的SQL語句。慢查詢能夠幫忙找出通過改寫來完善其執(zhí)行能力的查詢語句。但是,在解讀它的內(nèi)容的時(shí)候,還應(yīng)當(dāng)考慮到系統(tǒng)的正常工作負(fù)載。因?yàn)檫@個(gè)執(zhí)行時(shí)間是以實(shí)際時(shí)間來衡量的,而不是以CPU時(shí)間來衡量的。如果MySQL數(shù)據(jù)庫的負(fù)載在某一時(shí)間段里突然暴增,就可能會將許多查詢都誤認(rèn)為慢查詢,然而它們在數(shù)據(jù)庫正常工作負(fù)載下可能是不慢的。2.3通用查詢?nèi)罩就ㄓ貌樵內(nèi)罩臼怯糜谟涗浽贛ySQL上執(zhí)行的所有SQL命令的日志,但是并不記錄返回結(jié)果,執(zhí)行的命令和語法無論正確與否都會被記錄下來。在默認(rèn)情況下MySQL不會開啟通用查詢?nèi)罩?,因?yàn)閿?shù)據(jù)庫自身就占用計(jì)算機(jī)大量的讀寫空間,開啟后會不斷的進(jìn)行讀寫操作,這樣將會極大地增加系統(tǒng)的負(fù)擔(dān),這對于企業(yè)來說這也是一個(gè)很大的負(fù)擔(dān)。但是如果開啟該功能也可以使數(shù)據(jù)庫管理員非常方便地審計(jì)和分析MySQL中可能存在的問題,這樣能夠提高管理員的工作效率,同樣確保了數(shù)據(jù)庫的安全和可靠,保證用戶數(shù)據(jù)的安全。2.3.1通用查詢?nèi)罩镜呐渲?查看通用查詢?nèi)罩臼欠耖_啟及配置信息,執(zhí)行命令:showvariableswherevariable_namelike‘%general_log%’orvariable_name=‘log_output’;此命令可以查看通用查詢?nèi)罩臼欠耖_啟、日志的保存方式及位置。其中通用查詢?nèi)罩镜拇娣盼恢每梢詾閒ile、table和file&table三種。如果是file型,通用查詢?nèi)罩疽晕募男问侥J(rèn)存放在data目錄下。如果是table型,則將所有SQL記錄轉(zhuǎn)存到MySQL數(shù)據(jù)庫中的通用查詢?nèi)罩颈碇?。如果是file&table型,通用查詢?nèi)罩就瑫r(shí)記錄到文件和數(shù)據(jù)庫中。通用查詢?nèi)罩居涗浀絫able中,要比記錄到file中耗費(fèi)更多的系統(tǒng)資源。一般通用查詢?nèi)罩镜谋砻莋eneral_log,存放在mysql數(shù)據(jù)庫中。通用查詢?nèi)罩镜谋碇饕?個(gè)字段組成,分別是event_time、user_host、thread_id、server_id、command_type和argument字段。表1為其每一字段的功能。表1event_time記錄時(shí)間user_host記錄連接者IP和主機(jī)名thread_id識別每次操作線程號server_id區(qū)分主從command_type記錄操作類型argument字段記錄每次SQL命令2.3.2通用查詢?nèi)罩疚募驗(yàn)橥ㄓ貌樵內(nèi)罩镜男问酱鎯κ俏谋疚募?,所以可以直接查看通用查詢?nèi)罩局杏涗浀男畔ⅰ?zhí)行命令:showvariableswherevariable_namelike‘%general_log%’;通過此命令可以查看通用查詢?nèi)罩臼欠耖_啟以及通用查詢?nèi)罩疚募娣盼恢?。由圖4可知通用查詢?nèi)罩静⑽撮_啟。圖4通用查詢?nèi)罩拘畔?zhí)行命令來開啟通用查詢?nèi)罩荆簊etglobalgeneral_log=1;由圖5可知通用查詢?nèi)罩疽驯婚_啟。圖5通用查詢?nèi)罩拘畔膱D5中可知通用查詢?nèi)罩镜拇娣盼恢?,找到日志文件打開,圖6即為通用查詢?nèi)罩镜牟糠中畔?。圖6通用查詢?nèi)罩緝?nèi)容圖6中的第1行和第2行是關(guān)于數(shù)據(jù)庫的信息:數(shù)據(jù)庫的版本號、mysql的程序所在文件夾的路徑、MySQL數(shù)據(jù)庫監(jiān)聽的端口號。第3行是通用查詢?nèi)罩疚募杏涗浢織l信息的格式:日志時(shí)間、客戶端連接的ID、執(zhí)行的命令的類型、執(zhí)行的命令的具體信息。第4行表示記錄了之前查詢通用查詢?nèi)罩臼欠耖_啟的操作。第5行表示有root用戶從本地連接到MySQL數(shù)據(jù)庫。通用查詢?nèi)罩局械男畔⒂卸喾N類型的命令,表2為一些常用命令。表2通用日志命令命令說明Quit客戶端與服務(wù)器的連接關(guān)閉Query客戶端進(jìn)行SQL查詢命令Connect客戶端連接到服務(wù)器2.4二進(jìn)制日志MySQL的二進(jìn)制日志是一個(gè)二進(jìn)制文件,主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)變化的SQL語句。二進(jìn)制日志是MySQL上最重要的日志,記錄了可能使MySQL數(shù)據(jù)庫產(chǎn)生更改的所有操作,并且記錄了語句的發(fā)生時(shí)間、執(zhí)行時(shí)長、操作數(shù)據(jù)等其它信息,但不包含select和show這類沒有對數(shù)據(jù)進(jìn)行修改的SQL語句。二進(jìn)制日志與通用查詢?nèi)罩静煌?,二進(jìn)制日志不是文本文件格式而是更高效的二進(jìn)制格式。二進(jìn)制格式占用的空間比文本格式要更少,但二進(jìn)制格式不能像文本格式一樣直接查看。通過MySQL數(shù)據(jù)庫自帶的mysqlbinlog工具可以將二進(jìn)制格式轉(zhuǎn)化成文本格式。MySQL數(shù)據(jù)庫二進(jìn)制日志中的事件是按照其執(zhí)行順序排列的,即二進(jìn)制日志中記錄事件的順序是按照事件執(zhí)行結(jié)束時(shí)的先后順序排列的,并不是到達(dá)服務(wù)器的先后順序,這對按照復(fù)制機(jī)制的正確運(yùn)行有著十分重要的意義。2.4.1二進(jìn)制日志的配置在默認(rèn)狀態(tài)下,二進(jìn)制日志不會開啟,并不像通用查詢?nèi)罩灸菢又С钟肧QL命令直接開啟,但可以通過SQL命令來查看其狀態(tài)和配置信息。執(zhí)行命令:showvariableswherevariable_namelike"%bin%";其中MySQL環(huán)境變量中較為重要的為binlog_format、log_bin和sql_log_bin。表3為其功能。表3binlog_format規(guī)定了二進(jìn)制的存放方式、STATEMENT以語句的形式記錄,ROW以數(shù)據(jù)修改的形式記錄,MIXED以語句和數(shù)據(jù)修改混合形式記錄log_bin用于二進(jìn)制日志是否開啟的,ON表示開啟、OFF表示未開啟,默認(rèn)是OFFsql_log_bin表示是否對二進(jìn)制日志進(jìn)行日志記錄,ON表示執(zhí)行記錄,OFF表示不執(zhí)行記錄。圖7和圖8可知,二進(jìn)制的存放方式是以數(shù)據(jù)修改的形式記錄,二進(jìn)制日志已經(jīng)開啟,并沒有對二進(jìn)制日志進(jìn)行日志記錄。圖7二進(jìn)制日志信息圖8二進(jìn)制日志信息2.4.2二進(jìn)制日志的組成構(gòu)成二進(jìn)制日志文件的主要有兩部分,首先為二進(jìn)制日志索引文件(文件名后綴為.index),二進(jìn)制日志索引文件用于記錄所有的二進(jìn)制文件;其次為二進(jìn)制日志文件(文件名后綴為.00000*),二進(jìn)制日志文件用于記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句事件。開啟了二進(jìn)制日志,MySQL數(shù)據(jù)庫會自動生成一個(gè)索引文件,就是二進(jìn)制日志文件的基本名加上一個(gè).index的擴(kuò)展名。如圖9,LAPTOP-NPVE9FHA-bin.index是二進(jìn)制日志索引文件,后綴從000007~000015為二進(jìn)制日志文件。打開LAPTOP-NPVE9FHA-bin.index文件,里面記錄著所有二進(jìn)制文件。如圖10所示。圖9二進(jìn)制日志圖10二進(jìn)制日志2.4.3二進(jìn)制日志的功能MySQL數(shù)據(jù)庫擁有數(shù)據(jù)備份功能和數(shù)據(jù)恢復(fù)功能。其中數(shù)據(jù)恢復(fù)功能是最常用也是最重要的一個(gè)功能。如果沒開啟二進(jìn)制日志功能,可能發(fā)生丟失的數(shù)據(jù)無法恢復(fù)的現(xiàn)象,如數(shù)據(jù)庫在14:00運(yùn)行時(shí)出現(xiàn)錯(cuò)誤,是系統(tǒng)崩潰無法恢復(fù),那么從前天凌晨12:00到當(dāng)天14:00之間所有的數(shù)據(jù)內(nèi)容將無法恢復(fù)。如果開啟了二進(jìn)制日志功能,就可以使用前一天凌晨12:00的數(shù)據(jù)庫備份文件恢復(fù)到前一天凌晨12:00之前的數(shù)據(jù)庫狀態(tài),然后使用二進(jìn)制日志文件恢復(fù)到前一天凌晨12:00到當(dāng)天下午14:00之間的數(shù)據(jù)庫中的數(shù)據(jù)內(nèi)容。2.5mysqlbinlog工具由于二進(jìn)制日志文件的格式并不是文本文件,因此必須借助工具來進(jìn)行查看。MySQL數(shù)據(jù)庫自帶的mysqlbinlog工具就可以直接通過解析將二進(jìn)制格式轉(zhuǎn)化為可直接查看的文本格式。在Data\目錄下,執(zhí)行命令:mysqlbinlogLAPTOP-NPVE9FHA-bin.000018此命令為解析文件名為LAPTOP-NPVE9FHA-bin.000018的二進(jìn)制日志文件。圖11是使用mysqlbinlog工具解析二進(jìn)制日志得到的一部分信息。事先創(chuàng)建了名為lunwen、jingcha的數(shù)據(jù)庫。在圖11的倒數(shù)第7行,可以看出二進(jìn)制日志記錄了之前創(chuàng)建lunwen數(shù)據(jù)庫時(shí)的操作。在圖11的信息中,從第2行到第4是每次轉(zhuǎn)化后的文本格式的日志信息的序言;第5行到第9行是回滾的信息,回滾的目的是確保輸出不會偶然被放入到事務(wù)中,因?yàn)樵谳敵鰝魉偷娇蛻舳说臅r(shí)候,這個(gè)事務(wù)已經(jīng)在客戶端上開始了。圖11二進(jìn)制日志內(nèi)容由圖12,at424是事件開始的字節(jié)位置,也就是這個(gè)時(shí)間的第一個(gè)字節(jié);21032712:02:31是這個(gè)事件的時(shí)間戳,代表該語句在事件執(zhí)行的服務(wù)器上什么時(shí)間啟動;serverid1是指事件發(fā)生的服務(wù)器的值;end_log_pos545是表示下一個(gè)事件的開始位置,也就是當(dāng)前時(shí)間的結(jié)束位置+1;CRC320x0f45f7f6是校驗(yàn)碼,用來檢錯(cuò)的;Query是事件的類型;thread_id=11表示這個(gè)事件在ID為11的線程上執(zhí)行;exec_time=1是在主服務(wù)器上執(zhí)行事件所花費(fèi)的事件;error_code=0表示執(zhí)行時(shí)間的結(jié)果,0表示沒事錯(cuò)誤發(fā)生;每當(dāng)數(shù)據(jù)庫更改的時(shí)候,第4行的use語句就會被記錄下來,當(dāng)出現(xiàn)一個(gè)use語句,就是一個(gè)新事件的第一行。每個(gè)事件的輸出中的第1行是SETTIMESTAMP;最后一行可以看出,還在此數(shù)據(jù)庫中創(chuàng)建了一個(gè)名為a的表。圖12二進(jìn)制日志信息格式被解析后的二進(jìn)制日志轉(zhuǎn)化成的文本格式文件中最后會以圖13中的信息結(jié)束。圖13二進(jìn)制日志文件結(jié)尾信息2.6本章小結(jié)日志文件在MySQL數(shù)據(jù)庫中起到了非常重要的作用,通過查看這些日志文件中的信息,可以發(fā)現(xiàn)存在在數(shù)據(jù)庫中的一些問題。本章介紹了MySQL數(shù)據(jù)庫中的四種日志:錯(cuò)誤日志、慢查詢?nèi)罩?、通用查詢?nèi)罩竞投M(jìn)制日志。這四種日志有不同的用途。(1)錯(cuò)誤日志可以幫助發(fā)現(xiàn)MySQL數(shù)據(jù)庫發(fā)生故障無法正常啟動的原因。(2)慢查詢?nèi)罩灸軌驇兔φ页鐾ㄟ^改寫來完善其執(zhí)行能力的查詢語句。(3)通用查詢?nèi)罩究梢杂涗浻脩魣?zhí)行的所有SQL命令。(4)二進(jìn)制日志記錄了MySQL數(shù)據(jù)庫中執(zhí)行的所有可能更改數(shù)據(jù)信息的操作,可以利用二進(jìn)制日志的這一特點(diǎn)進(jìn)行數(shù)據(jù)恢復(fù)。最后還介紹了mysqlbinlog工具,因?yàn)槎M(jìn)制日志并不能像其他三種日志一樣直接查看,因此需要借助這個(gè)工具將不可直接查看的二進(jìn)制格式轉(zhuǎn)化為可直接查看的文本格式。

3基于二進(jìn)制日志分析的MySQL數(shù)據(jù)庫取證通過分析MySQL數(shù)據(jù)庫的日志功能,本文使用二進(jìn)制日志對MySQL數(shù)據(jù)庫進(jìn)行取證,通過利用事件的偏移值,確定事件開始偏移和結(jié)束偏移的范圍,來進(jìn)行數(shù)據(jù)庫恢復(fù)。二進(jìn)制日志詳細(xì)解析3.1.1二進(jìn)制日志結(jié)構(gòu)從第二章中的介紹已經(jīng)知道,二進(jìn)制日志由兩部分文件構(gòu)成,包含一個(gè)索引文件和若干個(gè)二進(jìn)制日志文件[6]。如圖14,表示二進(jìn)制日志結(jié)構(gòu)。圖14二進(jìn)制日志結(jié)構(gòu)3.1.2二進(jìn)制日志事件總體結(jié)構(gòu)圖15二進(jìn)制日志事件結(jié)構(gòu)CommonHeader是一個(gè)通用頭,包含著事件的基本信息,其中最重要的字段就是事件的類型和事件的大小。 PostHesder是一個(gè)提交頭,提交頭與特定事件的類型有關(guān),對于不同的類型,字段存儲的信息不同,但與通用頭一樣,給定的二進(jìn)制日志文件中,提交頭的大小是相同的。3.1.3CommonHeader結(jié)構(gòu)CommonHeader結(jié)構(gòu)一共有6個(gè)部分,如圖16,包括:Timestamp、Event_Type、Server_id、Event_size、log_pos、Flags。圖16CommonHeader結(jié)構(gòu)Timestamp:4字節(jié)無符號整型。表示命令開始執(zhí)行時(shí)的時(shí)間,精確到秒。Event_Type:1字節(jié)枚舉型。表示事件類型。比如QUERY、LOAD_EVENT等類型。Server_id:4字節(jié)無符號整型??梢圆榭磁渲弥械姆?wù)器ID,表示日志是那個(gè)服務(wù)器產(chǎn)生的。Event_size:4字節(jié)無符號整型。表示該事件的長度,也就是字節(jié)數(shù)。log_pos:4字節(jié)無符號整型。表示該事件結(jié)束的位置,也就是該條日志記錄最后一個(gè)字節(jié)的下一個(gè)字節(jié)的位置。Flags:2字節(jié)位閥。用來記錄二進(jìn)制日志文件是否正常關(guān)閉等信息。在Event_Type字段還有其他許多事件類型,表3進(jìn)行了說明。表3事件值事件名稱事件說明2Query_Event查詢事件3Stop_Event在服務(wù)器關(guān)機(jī)時(shí)寫入的事件15Format_Description_Event二進(jìn)制日志文件中的第一個(gè)事件,用于指定所使用的格式版本3.1.4FormatDescription類型的PostHeader結(jié)構(gòu)FormatDescription是二進(jìn)制日志文件的第一個(gè)事件,它的結(jié)構(gòu)如圖17。圖17FormatDescription時(shí)間結(jié)構(gòu)Binlog-version:表示該二進(jìn)制日志文件的版本,2字節(jié)無符號數(shù)。Mysql-serverversion:記錄了服務(wù)器的版本,50個(gè)字節(jié),字符串類型。Creattimestamp:二進(jìn)制文件創(chuàng)建的事件軸,4字節(jié)無符號數(shù)。Eventheaderlength:表示事件頭的長度也就是Common-Header長度,用1字節(jié)表示。Eventtypeheaderlengths:表示事件類型的多少,一般是多少個(gè)事件類型就是多少個(gè)字節(jié)。3.1.5Query類型的Poster-Header結(jié)構(gòu)QUERY類型的記錄和前面所說的日志消息的結(jié)構(gòu)是一樣的,不同的是Common-header后面是Post-header,然后是Body的內(nèi)容。Poster-Header結(jié)構(gòu)一共有13個(gè)字節(jié),如圖18,包括5個(gè)部分,分別為:Thread_id,Exec_time,Db_len,Error_code,_Status_var_len。圖18Poster-Header結(jié)構(gòu)Thread_id:4字節(jié),表示線程ID,可以用來分辨用戶臨時(shí)創(chuàng)建的表。Exec_time:4字節(jié),表示該記錄所記錄的信息在數(shù)據(jù)庫中所執(zhí)行的事件。Db_len:1字節(jié),表示該記錄所記錄的信息所在的數(shù)據(jù)庫的名字的長度。Error_code:2字節(jié),表示執(zhí)行命令出現(xiàn)錯(cuò)誤。Status_var_len:2字節(jié),Status_var字段的長度,該字段在Body結(jié)構(gòu)中。3.2實(shí)驗(yàn)測試通過上文對二進(jìn)制日志的分析,對MySQL數(shù)據(jù)庫進(jìn)行取證。實(shí)驗(yàn)使用MySQL8.0軟件在windows10系統(tǒng),內(nèi)存8.00GB,Inter(R)Core(TM)i7-7700HQCPU@2.80GHz的環(huán)境下進(jìn)行實(shí)驗(yàn)。犯罪現(xiàn)場中數(shù)據(jù)庫的數(shù)據(jù)一般會丟失或遭到惡意刪除,所以實(shí)驗(yàn)通過對數(shù)據(jù)庫的增刪改操作來模擬這一狀況。實(shí)驗(yàn)共分為創(chuàng)建數(shù)據(jù)庫、輸入數(shù)據(jù)、刪除數(shù)據(jù)庫、數(shù)據(jù)庫恢復(fù),最后再進(jìn)行數(shù)據(jù)庫取證。3.2.1增刪改操作首先創(chuàng)建一個(gè)數(shù)據(jù)庫進(jìn)行增刪改操作[7]。如圖19、20所示。圖19創(chuàng)建數(shù)據(jù)庫圖20增刪改操作由圖19可知?jiǎng)?chuàng)建完名為lunwen的數(shù)據(jù)庫后,數(shù)據(jù)庫的數(shù)量為8;如圖20,刪除數(shù)據(jù)庫lunwen后,數(shù)據(jù)庫的數(shù)量變?yōu)?。3.2.2數(shù)據(jù)庫恢復(fù)首先確定偏移值的范圍。執(zhí)行命令:showbinlogeventsin‘LAPTOP-NPVE9FHA-bin.000023’;如圖21所示。圖21確定偏移值通過此命令可以準(zhǔn)確的定位偏移點(diǎn)??梢钥吹絼?chuàng)建lunwen數(shù)據(jù)庫時(shí)的pos值是233,刪除數(shù)據(jù)庫lunwen時(shí)的pos值時(shí)是1459。其次要核實(shí)偏移范圍,利用前面提到的mysqlbinlog工具,來解析二進(jìn)制文件。如圖22、23。圖22核實(shí)偏移值圖23核實(shí)偏移值最終確定起始偏移值應(yīng)該為233。如果要恢復(fù)數(shù)據(jù)庫lunwen,要選擇刪除數(shù)據(jù)庫lunwen前一個(gè)事件的pos值,這樣才能完成數(shù)據(jù)庫恢復(fù),所以結(jié)束偏移值為1382。最后進(jìn)行數(shù)據(jù)庫恢復(fù),執(zhí)行:mysqlbinlog--start-position=233--stop-position=1382LAPTOP-NPVE9FHA–bin.000023|mysql-uroot–p,圖24所示。再次登錄MySQL數(shù)據(jù)庫,查看數(shù)據(jù)庫數(shù)量又恢復(fù)到8個(gè),而且表a中的數(shù)據(jù)也都恢復(fù)了。圖24數(shù)據(jù)庫恢復(fù)3.2.3數(shù)據(jù)庫取證通過對日志分析完成對數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)后,接下來就可以進(jìn)行數(shù)據(jù)庫取證??梢酝ㄟ^導(dǎo)出MySQL數(shù)據(jù)庫的方法對數(shù)據(jù)庫進(jìn)行取證。mysqldump.exe保存在MySQL數(shù)據(jù)庫的bin文件夾下,所以在bin目錄下輸入:mysqldump-uroot-p--databaseslunwen>"C:\ProgramData\MySQL\MySQLServer8.0\Uploads\lunwen.sql"[8],如圖25所示。圖25數(shù)據(jù)庫導(dǎo)出最后在如圖26的路徑下生成lunwen.sql文件,就可以完成對MySQL數(shù)據(jù)庫的取證工作。圖26數(shù)據(jù)庫文件3.3本章小結(jié)本章對數(shù)據(jù)庫進(jìn)行了恢復(fù),通過模擬案發(fā)現(xiàn)場數(shù)據(jù)庫的狀況,對數(shù)據(jù)庫進(jìn)行增刪改的操作,然后通過確定偏移值的范圍、合適偏移范圍、到數(shù)據(jù)恢復(fù),最后實(shí)現(xiàn)了基于日志分析的數(shù)據(jù)庫恢復(fù)。再通過mysqldump完成對數(shù)據(jù)庫的取證工作。4結(jié)語在21世紀(jì),人們在日常的工作和生活上都已經(jīng)離不開數(shù)據(jù)庫?,F(xiàn)在計(jì)算機(jī)信息化的普及程度越來越高,需要產(chǎn)生的數(shù)據(jù)越來越大,以前可以簡單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論