|
1 |
| -Introspy |
2 |
| -======== |
| 1 | +Introspy-iOS |
| 2 | +============ |
3 | 3 |
|
4 | 4 | Blackbox tool to help understand what an iOS application is doing at runtime
|
5 | 5 | and assist in the identification of potential security issues.
|
6 | 6 |
|
| 7 | +See http://isecpartners.github.io/Introspy-iOS/ for a quick introduction. |
| 8 | + |
7 | 9 |
|
8 | 10 | Description
|
9 | 11 | -----------
|
10 | 12 |
|
11 |
| -Introspy comprises two separate modules: a tracer and an analyzer. |
| 13 | +This is the repository for the Introspy-iOS tracer. |
12 | 14 |
|
13 |
| -The tracer component can be installed on a jailbroken device and dynamically |
14 |
| -configured to hook security-sensitive iOS APIs at run-time. The tool records |
15 |
| -details of relevant API calls made by the application, including function |
16 |
| -calls, arguments and return values and persists them in a database. |
17 |
| -Additionally, the calls can optionally be sent to the Console for real-time |
18 |
| -analysis. |
| 15 | +The tracer can be installed on a jailbroken device to hook and log |
| 16 | +security-sensitive iOS APIs called by applications running on the device. The |
| 17 | +tool records details of relevant API calls, including arguments and return |
| 18 | +values and persists them in a database. |
| 19 | +Additionally, the calls are also sent to the Console for real-time analysis. |
19 | 20 |
|
20 |
| -The Introspy analyzer can then be used to analyze a database generated by the |
21 |
| -tracer, and generate HTML reports containing the list of logged function calls |
22 |
| -as well as a list of potential vulnerabilities affecting the application. |
| 21 | +The database can then be fed to Introspy-Analyzer, a Python script to generate |
| 22 | +HTML reports containing the list of logged function calls as well as a list of |
| 23 | +potential vulnerabilities affecting the application. Introspy-Analyzer is hosted |
| 24 | +on a separate repository: |
| 25 | +https://github.com/iSECPartners/Introspy-Analyzer |
23 | 26 |
|
24 |
| -See http://isecpartners.github.io/Introspy-iOS/ for a quick introduction. |
25 | 27 |
|
26 |
| -Introspy Tracer |
27 |
| ---------------- |
| 28 | +Installation |
| 29 | +------------ |
28 | 30 |
|
29 |
| -Users should first download the right pre-compiled Debian package: |
30 |
| -- https://www.dropbox.com/s/z5cwqk5wti3zsvd/com.isecpartners.introspy-v0.3-iOS_6.1.deb?dl=1 |
| 31 | +Users should first download the latest pre-compiled Debian package available |
| 32 | +in the release section of the project page at: |
| 33 | +https://github.com/iSECPartners/Introspy-iOS/releases |
31 | 34 |
|
32 | 35 | ### Dependencies
|
33 | 36 |
|
@@ -60,132 +63,50 @@ Finally, kill and restart the App you want to monitor.
|
60 | 63 |
|
61 | 64 | dpkg -r com.isecpartners.introspy
|
62 | 65 |
|
63 |
| -Introspy Analyzer |
64 |
| ------------------ |
65 |
| - |
66 |
| -The analyzer requires Python 2.6 or 2.7. |
67 |
| - |
68 |
| -### Command-line Usage |
69 |
| - |
70 |
| -The Introspy tracer should be first used on the application to be tested, i.e., |
71 |
| -by selecting it within the "Introspy - Apps" Settings menu on the iOS device. |
72 |
| -Then simply specify the device IP address when you run the analysis tool and |
73 |
| -select the appropriate application database. This will store a local copy of the |
74 |
| -database, which you can analyze again by specifying the database name as opposed |
75 |
| -to the device IP address. |
76 |
| - |
77 |
| - $ python introspy.py 192.168.1.127 --outdir e-bank |
78 |
| - |
79 |
| - 0. ./Applications/94656731-0259-4AE9-9EEE-BADC9244AD82/introspy-com.isecpartners.e-bank.db |
80 |
| - 1. ./introspy-com.apple.mobilemail.db |
81 |
| - 2. ./introspy-com.isecpartners.introspytestapp.db |
82 |
| - Select the database to analyze: 0 |
83 |
| - |
84 |
| -The example above will generate an HTML report for the com.isecpartners.e-bank |
85 |
| -application within the newly created "e-bank" directory (specified by the |
86 |
| -`--outdir` option). The HTML report is intended to be the most common interface to |
87 |
| -the call database and allows users to browse the full call list or filter the |
88 |
| -list to view only those calls flagged by specific signatures. |
89 |
| - |
90 |
| -#### Reporting |
91 |
| - |
92 |
| -While the HTML formatted report is the most digestable format, the analysis tool |
93 |
| -can also be used directly from the command-line. Just as the HTML report allows |
94 |
| -you to show/hide signature groups and subgroups, you can specify groups (-g) as |
95 |
| -well as subgroups (-s) when running the analysis to limit the output to only |
96 |
| -those calls that match the filtering criteria. |
97 |
| - |
98 |
| - $ python introspy.py introspy-com.isecpartners.e-bank.db -g IPC -s Schemes |
99 |
| - Specific URL schemes are implemented by the application. |
100 |
| - CFBundleURLTypes:CFBundleURLSchemes |
101 |
| - arguments => |
102 |
| - CFBundleURLIsPrivate => nil |
103 |
| - CFBundleURLName => transfer-money |
104 |
| - CFBundleURLScheme => transfer-money |
105 |
| - |
106 |
| -This example shows analysis of a local database with filtering options to limit |
107 |
| -the output to only display registered URL schemes. We can see here that URL |
108 |
| -requests with the transfer-money:// scheme will be handled by the application. |
109 |
| - |
110 |
| -The analysis tool also allows users to print the entire call list similarly to |
111 |
| -the HTML report's "Traced Calls" view by specifiying the `--list` option, |
112 |
| -although this will print an undigestable amount of data to stdout and as such is |
113 |
| -not recommended. |
114 |
| - |
115 |
| -#### Enumerations |
116 |
| - |
117 |
| -The command-line tool also allows users to enumerate various data from the list |
118 |
| -of traced calls (via `--info`), inlcuding a list of all of the unique URLs |
119 |
| -accessed by the application (urls), all files accessed (files), as well as |
120 |
| -Keychain items that were added or modified (keys). |
121 |
| - |
122 |
| - $ python introspy.py introspy-com.isecpartners.e-bank.db --info keys |
123 |
| - token = MGJiNzg1NGRkNzBkNGMyZTExNzc4NTA3OTdjNjNkNjFiY2Q1 |
124 |
| - consumerKey = YzAwNzE4ZDZlYjYzOTM4NGM2NTc56j |
125 |
| - consumerSecret = NmUzYmNjNmQ2YjJjNWU1MDE0Zjk3NGI4MzU4ZWRl |
126 |
| - |
127 |
| -### Programmatic Usage |
128 |
| - |
129 |
| - >>> from analyzer import DBAnalyzer |
130 |
| - >>> analyzedDB = DBAnalyzer.DBAnalyzer('introspy-com.isecpartners.e-bank.db') |
131 |
| - >>> print analyzedDB.get_findings_as_JSON() |
132 |
| - ... |
133 |
| - {"class": "CFBundleURLTypes", |
134 |
| - "method": "CFBundleURLSchemes"}, |
135 |
| - "arguments": |
136 |
| - {"CFBundleURLName": "transfer-money", |
137 |
| - "CFBundleURLScheme": "transfer-money", |
138 |
| - "CFBundleURLIsPrivate": "nil"} |
139 |
| - } |
140 |
| - |
141 |
| -### Signatures |
142 |
| - |
143 |
| -Beyond simply listing the calls recorded by the Introspy tracer, the analysis |
144 |
| -tool allows you to apply predefined signatures to the call list and flag |
145 |
| -potential vulnerabilities or insecure configurations. Users can browse the list |
146 |
| -of flagged calls simply by browsing to the "Potential Findings" view within the |
147 |
| -generated HTML report and expanding the desired signature group. |
148 |
| - |
149 |
| -The signatures themselves are defined in `analyzer/IOS_SIGNATURES.py` and can be |
150 |
| -easily extended. |
151 |
| - |
152 |
| -Doing It Yourself |
153 |
| ------------------ |
154 |
| - |
155 |
| -### Building the iOS Tracer From Source |
| 66 | + |
| 67 | +Generating HTML Reports |
| 68 | +----------------------- |
| 69 | + |
| 70 | +The tracer will store data about API calls made by applications in a database |
| 71 | +stored on the device (actually one in each application's folder). This database |
| 72 | +can be fed to a Python script call Introspy-Analyzer in order to generate HTML |
| 73 | +reports that make it a lot easier to review the data collected by the tracer. |
| 74 | +The script will also analyze and flag dangerous API calls in order to facilitate |
| 75 | +the process of identifying vulnerabilities within iOS applications. |
| 76 | + |
| 77 | +Introspy-Analyzer is hosted on a separate repository: |
| 78 | +https://github.com/iSECPartners/Introspy-Analyzer |
| 79 | + |
| 80 | + |
| 81 | +Building Introspy-iOS |
| 82 | +--------------------- |
156 | 83 |
|
157 | 84 | Most users should just download and install the pre-compiled Debian package.
|
158 | 85 | However, if you want to modify the library's functionality you will have to
|
159 |
| -clone the source repository and build the debian package yourself. |
| 86 | +build the Debian package yourself. |
160 | 87 |
|
161 |
| - git clone https://github.com/iSECPartners/introspy.git |
| 88 | +The build requires rpetrich's fork of the Theos suite, available at |
| 89 | +https://github.com/rpetrich/theos. |
| 90 | +For general instructions on how to install Theos, see |
| 91 | +http://www.iphonedevwiki.net/index.php/Theos/Getting\_Started but make sure |
| 92 | +you're using rpetrich's fork, not the official Theos. |
162 | 93 |
|
163 |
| -The build requires the Theos suite to be installed; |
164 |
| -see http://www.iphonedevwiki.net/index.php/Theos/Getting\_Started . |
165 | 94 | You first have to create a symlink to your theos installation:
|
166 | 95 |
|
167 |
| - cd introspy/ios-tracer/ |
| 96 | + cd Introspy-iOS/src/ |
168 | 97 | ln -s /opt/theos/ ./theos
|
169 | 98 |
|
170 | 99 | Then, the package can be built using:
|
171 | 100 |
|
172 | 101 | make package
|
173 | 102 |
|
174 |
| -### Installing the iOS Tracer From Source |
175 |
| - |
176 |
| -Once you've successfully created the debian package, you can use the Theos |
177 |
| -Makefiles to automatically install the package and respring the device: |
| 103 | +Once you've successfully created the debian package, you can use Theos to |
| 104 | +automatically install the package and re-spring the device by specifying the |
| 105 | +device's IP address in the THEOS_DEVICE_IP environment variable: |
178 | 106 |
|
179 | 107 | export THEOS_DEVICE_IP=192.168.1.127
|
180 | 108 | make install
|
181 | 109 |
|
182 |
| -Group and Subgroup Filtering |
183 |
| ----------------------------- |
184 |
| - |
185 |
| -The groups and subgroups correlate to filtering via the Settings menu as well as |
186 |
| -during offline analysis using the command-line. For details on exactly which |
187 |
| -methods correspond to each group and subgroup, refer to the wiki |
188 |
| -[documentation](https://github.com/iSECPartners/introspy/wiki). |
189 | 110 |
|
190 | 111 | License
|
191 | 112 | -------
|
|
0 commit comments