你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 本地文件系統取證

本地文件系統取證

編輯:關於IOS

引言

我們將在本文分析iOS的文件系統,了解其目錄是如何組織的,查看一些重要的文件,然後看看如何才能夠從數據庫文件和plist文件導出數據。我們將學習應用是如何在特定目錄(沙盒)內存放數據的,以及怎樣才能提取這些數據。

有一個很重要的事情需要注意,在前面的文章中,我們都是以root身份登錄進設備的。設備上有另一個用戶名叫mobile, 一個mobile用戶擁有的權限是少於root用戶的。除了Cydia和少數的應用以root權限應用之外,其他應用都是以mobile的身份應用的。有些蘋果內部的daemon服務也以root權限運行。執行ps aux就可以查看清楚。在最左邊,我們可以看到用戶列。可以看到Cydia以root身份運行,所有其他應用都以mobile身份運行, 例如/Applications/AppStore.app/AppStore,有些demon也以root身份運行,如/usr/sbin/wifid。一些你通過Cydia安裝的應用也可能會以root身份運行。 一旦你的設備一越獄,默認root和mobile的密碼都是alpine.

本地文件系統取證

可以配置一個應用以root權限運行。你可以看看Stack Overflow上的這篇文章來了解更多細節。

我們ssh進設備。到/Applications目錄。你可以在該文件夾下看到一些應用。它們中的大多是都是iOS預裝的,有些應用是通過Cydia安裝的,比如Ternimal 應用。請注意,所有運行在/Applications的應用並不運行在沙盒環境,而所有在/var/mobile/Applications目錄下的應用都運行在一個沙盒環境下。文章後面會討論沙盒。不過,它們默認依然以mobile用戶運行,除非專門做了配置。

本地文件系統取證

所有從App Store下載的應用都位於/var/mobile/Applications目錄。這個目錄也包含用installipa或者其他外部源如Cydia安裝的應用。所有這些應用都運行在沙盒環境下。

本地文件系統取證

請注意,從iOS4及以後,每個應用都駐留的環境叫做沙盒(Sandbox)。這樣做的主要目的是不允許應用訪問它自己沙盒外的任何數據。這樣做會更安全。不過,應用用合適的權限是可以訪問用戶某些特定的用戶數據的。例如要用戶允許去訪問聯系人,照片等等。不過,對這些也有不少爭論。 例如從iOS6開始,應用在得到用戶允許之後才能訪問用戶的聯系人。在這之前,應用不需要獲得任何權限就能訪問用戶的聯系人,這導致了較大的爭議,例如Path應用。

通過使用Entitlements,你可以訪問沙盒外的好些東西。你可以讀讀這裡的文檔。例如,要獲得一個用戶的calender的讀權限,.entitlements文件中的entitlement key com.apple.security.personal-information.calendars必須標志為YES。

讓我們看看某個特定應用的目錄結構。首先到Snapchat的目錄看看。對於所有應用都是類似的結構。

本地文件系統取證

  • Snapchat.app(應用名稱.app)文件夾包含所有的資源文件(images),plist文件和應用的二進制文件。
  • Documents目錄用於存放任意文件。相對於應用文件來說,這提供了一個只能在應用內訪問的單獨目錄。下面是從蘋果文檔中摘錄的一句話。

"把用戶數據放到/Documents/。用戶數據是你的應用不能再創建的任意數據,比如用戶的文檔或者任何其它用戶產生的內容“。

  • tmp文件夾用於存放用戶的臨時數據。應用的開發者有責任釋放被改文件夾占有的內存.
  • Library文件夾可以用來保存那些不是用戶數據的文件。

    你可以從下面的蘋果文檔的截圖知道更多信息。

本地文件系統取證

從數據庫中收集信息

蘋果用sqlite數據庫存了很多信息。這些數據庫數據庫通常以.db或者.sqlitedb結尾。對於開發者來說,許多功能比如Core Data, NSUserDefaults都從一個較低的層次操作這些sqlite數據庫。可以從這些數據庫抽取出特定應用,甚至操作系統級別的許多信息。可能包括電話歷史或者應用內保存的郵件等等。要找到所有的.db文件, 可以用命令 find . -name *.db

本地文件系統取證

你可以得到在設備上保存的所有數據庫文件。讓我們先看下其中的一些重要數據庫文件。

我在設備上安裝了gmail應用。下面這個文件對我來說看起來很有趣。

本地文件系統取證

看起來這個文件包含了一些重要的信息。讓我們先用sqlite客戶端分析一下這個文件。請注意,你需要在你的設備上安裝sqlite客戶端,比如sqlite3。 我們先打開設備,然後用命令sqlite3 file_name打開數據庫文件。

本地文件系統取證

請注意,你會得到一個sqlite解釋器。讓我們打開headers,這樣我們就可以看到所有的列表名稱。你可以用.tables命令看看數據庫存放的所有表。

本地文件系統取證

有些表看起來很有趣,比如cachedcontacts, cachedqueries 和 cachedmessages。讓我們從cachedmessages導出所有信息。

本地文件系統取證

正如我們看到的那樣,導出了所有緩存了的郵件。

類似的,我們也可以導出所有的短信(SMS)數據庫,位於/private/var/mobile/Library/SMS.你可以從導出文件中看到一條消息, 其文本是Test message for ios security tutorial

本地文件系統取證

另一個例子是聯系人數據庫,其位置是 /var/mobile/Library/AddressBook

本地文件系統取證

你也可以查看電話歷史記錄,位於 /private/var/wireless/Library/CallHistory

本地文件系統取證

有時候用命令行做這些事情確實很費時間。一個更好的分析方法就是導出這些信息到你電腦上,(然後用工具打開)。例如, 下載 Address Book Sqlite database

本地文件系統取證

我們可以用GUI Sqlite客戶端工具來分析這個文件。我這裡用的是MesaSQLite。免費且易用。 在MesaSQLite中,先到File,然後點擊Open Database,選擇db文件,然後在Content tab,選擇一個表然後點擊查看所有(Show All)

本地文件系統取證

如你所見,許多信息都可以從這些數據庫文件中獲取。我推薦你自己去探索下,找找其他應用甚至操作系統的數據庫文件看看。

從plist文件中獲取信息

plist是用戶存放許多不同設置和配置的結構化文本文件。因為這些信息都是以key-value這種鍵值對來存放信息的,所以要改變這些信息非常容易。因此,許多開發者有時會在這些文件中存放許多不該存放在這的信息。

即使在一個沒有越獄的設備上,plist文件也可以通過工具iExplorer獲取。你可以用iExlorer看看plist文件。例如如下圖是一個Defcon iOS應用的plist 中存放的信息。

本地文件系統取證

下圖是Snapchat應用的Documents目錄中保存的plist文件截圖。第一個高亮的區塊實際上是特定用戶的認證標識(authentication token),第二個高亮的區塊是 Snapchat的用戶名稱。

本地文件系統取證

Plist文件也可能包含機密信息,比如用戶名和密碼。有一個事情需要特別注意的就是,任何人都可以從設備中導出plist文件,即使這個設備沒有越獄。
你也可以從用戶的iTunes 備份中導出這些plist文件。過去數年,有開發者把機密數據存放在plist文件中,這是不正確的做法。
Linkedin iOS應用被發現的一個漏洞就是它把用戶的認證信息存放在plist文件中,你可以到這找到更多信息。

如果你想在terminal看這些plist文件,你可以先用工具plutil把它轉化為xml格式,命令是 plutil -covert xml1 [filename]。首先用下面的2個命令找到設備上所有的plist文件。

本地文件系統取證

然後把它轉成xml格式

本地文件系統取證

現在文件是結構化的格式了,我們可以用vim打開它。

本地文件系統取證

如你所見,我們現在能夠分析plist文件的內容。

總結

在本文中,我們查看了iOS的文件系統,學習到其目錄結果是如何組織的,查看了一些重要文件,並且學習了如何從數據庫和plist文件中導出重要數據。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved