bmt 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,514 @@
1
+ {
2
+ "metadata": {
3
+ "title": "Android",
4
+ "release_date": "2022-01-07T00:00:00+00:00",
5
+ "description": "Bugcrowd Android testing methodology",
6
+ "vrt_version": "10.0.1"
7
+ },
8
+ "content": {
9
+ "steps": [
10
+ {
11
+ "key": "architecture_design_and_threat_modelling",
12
+ "title": "Architecture, design and threat modelling",
13
+ "description": "",
14
+ "type": "checklist",
15
+ "items": [
16
+ {
17
+ "key": "all_app_components_are_identified_and_known_to_be_needed",
18
+ "title": "All app components are identified and known to be needed.",
19
+ "caption": "",
20
+ "description": "",
21
+ "tools": ""
22
+ },
23
+ {
24
+ "key": "security_controls_are_never_enforced_only_on_the_client_side",
25
+ "title": "Security controls are never enforced only on the client side, but on the respective remote endpoints.",
26
+ "caption": "",
27
+ "description": "",
28
+ "tools": ""
29
+ },
30
+ {
31
+ "key": "high_level_architecture_for_the_mobile_app_and_all_connected_remote_services",
32
+ "title": "A high-level architecture for the mobile app and all connected remote services has been defined and security has been addressed in that architecture.",
33
+ "caption": "",
34
+ "description": "",
35
+ "tools": ""
36
+ },
37
+ {
38
+ "key": "data_considered_sensitive_in_the_context_of_the_mobile_app_is_clearly_identified",
39
+ "title": "Data considered sensitive in the context of the mobile app is clearly identified.",
40
+ "caption": "",
41
+ "description": "",
42
+ "tools": ""
43
+ },
44
+ {
45
+ "key": "all_app_components_are_defined_in_terms_of_the_business_functions_and_or_security_functions_they_provide",
46
+ "title": "All app components are defined in terms of the business functions and/or security functions they provide.",
47
+ "caption": "",
48
+ "description": "",
49
+ "tools": ""
50
+ },
51
+ {
52
+ "key": "threat_model_for_the_mobile_app_and_the_associated_remote_services",
53
+ "title": "A threat model for the mobile app and the associated remote services has been produced that identifies potential threats and countermeasures.",
54
+ "caption": "",
55
+ "description": "",
56
+ "tools": ""
57
+ },
58
+ {
59
+ "key": "all_security_controls_have_a_centralized_implementation",
60
+ "title": "All security controls have a centralized implementation.",
61
+ "caption": "",
62
+ "description": "",
63
+ "tools": ""
64
+ },
65
+ {
66
+ "key": "explicit_policy_for_how_cryptographic_keys_are_managed",
67
+ "title": "There is an explicit policy for how cryptographic keys (if any) are managed, and the lifecycle of cryptographic keys is enforced. Ideally, follow a key management standard such as NIST SP 800-57.",
68
+ "caption": "",
69
+ "description": "",
70
+ "tools": ""
71
+ },
72
+ {
73
+ "key": "a_mechanism_for_enforcing_updates_of_the_mobile_app_exists",
74
+ "title": "A mechanism for enforcing updates of the mobile app exists.",
75
+ "caption": "",
76
+ "description": "",
77
+ "tools": ""
78
+ },
79
+ {
80
+ "key": "security_is_addressed_within_all_parts_of_the_software_development_lifecycle",
81
+ "title": "Security is addressed within all parts of the software development lifecycle.",
82
+ "caption": "",
83
+ "description": "",
84
+ "tools": ""
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "key": "data_storage_and_privacy",
90
+ "title": "Data Storage and Privacy",
91
+ "description": "",
92
+ "type": "checklist",
93
+ "items": [
94
+ {
95
+ "key": "system_credential_storage_facilities",
96
+ "title": "System credential storage facilities are used appropriately to store sensitive data, such as PII, user credentials or cryptographic keys.",
97
+ "caption": "",
98
+ "description": "",
99
+ "tools": ""
100
+ },
101
+ {
102
+ "key": "no_sensitive_data_should_be_stored_outside_of_the_app_container_or_system_credential_storage_facilities",
103
+ "title": "No sensitive data should be stored outside of the app container or system credential storage facilities.",
104
+ "caption": "",
105
+ "description": "",
106
+ "tools": ""
107
+ },
108
+ {
109
+ "key": "no_sensitive_data_is_written_to_application_logs",
110
+ "title": "No sensitive data is written to application logs.",
111
+ "caption": "",
112
+ "description": "",
113
+ "tools": ""
114
+ },
115
+ {
116
+ "key": "no_sensitive_data_is_shared_with_third_parties_unless_it_is_a_necessary_part_of_the_architecture",
117
+ "title": "No sensitive data is shared with third parties unless it is a necessary part of the architecture.",
118
+ "caption": "",
119
+ "description": "",
120
+ "tools": ""
121
+ },
122
+ {
123
+ "key": "the_keyboard_cache_is_disabled_on_text_inputs_that_process_sensitive_data",
124
+ "title": "The keyboard cache is disabled on text inputs that process sensitive data.",
125
+ "caption": "",
126
+ "description": "",
127
+ "tools": ""
128
+ },
129
+ {
130
+ "key": "no_sensitive_data_is_exposed_via_ipc_mechanisms",
131
+ "title": "No sensitive data is exposed via IPC mechanisms.",
132
+ "caption": "",
133
+ "description": "",
134
+ "tools": ""
135
+ },
136
+ {
137
+ "key": "no_sensitive_data_such_as_passwords_or_pins_is_exposed_through_the_user_interface",
138
+ "title": "No sensitive data, such as passwords or pins, is exposed through the user interface.",
139
+ "caption": "",
140
+ "description": "",
141
+ "tools": ""
142
+ },
143
+ {
144
+ "key": "no_sensitive_data_is_included_in_backups_generated_by_the_mobile_operating_system",
145
+ "title": "No sensitive data is included in backups generated by the mobile operating system.",
146
+ "caption": "",
147
+ "description": "",
148
+ "tools": ""
149
+ },
150
+ {
151
+ "key": "the_app_removes_sensitive_data_from_views_when_in_background",
152
+ "title": "The app removes sensitive data from views when in background.",
153
+ "caption": "",
154
+ "description": "",
155
+ "tools": ""
156
+ },
157
+ {
158
+ "key": "the_app_does_not_hold_sensitive_data_in_memory_longer_than_necessary_and_memory_is_cleared_explicitly_after_use",
159
+ "title": "The app does not hold sensitive data in memory longer than necessary, and memory is cleared explicitly after use.",
160
+ "caption": "",
161
+ "description": "",
162
+ "tools": ""
163
+ },
164
+ {
165
+ "key": "the_app_enforces_a_minimum_device_access_security_policy",
166
+ "title": "The app enforces a minimum device-access-security policy, such as requiring the user to set a device passcode.",
167
+ "caption": "",
168
+ "description": "",
169
+ "tools": ""
170
+ },
171
+ {
172
+ "key": "the_app_educates_the_user_about_the_personally_identifiable_information_and_security",
173
+ "title": "The app educates the user about the types of personally identifiable information processed, as well as security best practices the user should follow in using the app.",
174
+ "caption": "",
175
+ "description": "",
176
+ "tools": ""
177
+ }
178
+ ]
179
+ },
180
+ {
181
+ "key": "cryptography",
182
+ "title": "Cryptography",
183
+ "description": "",
184
+ "type": "checklist",
185
+ "items": [
186
+ {
187
+ "key": "the_app_does_not_rely_on_symmetric_cryptography_with_hardcoded_keys",
188
+ "title": "The app does not rely on symmetric cryptography with hardcoded keys as a sole method of encryption.",
189
+ "caption": "",
190
+ "description": "",
191
+ "tools": ""
192
+ },
193
+ {
194
+ "key": "the_app_uses_proven_implementations_of_cryptographic_primitives",
195
+ "title": "The app uses proven implementations of cryptographic primitives.",
196
+ "caption": "",
197
+ "description": "",
198
+ "tools": ""
199
+ },
200
+ {
201
+ "key": "the_app_uses_appropriate_cryptographic_primitives",
202
+ "title": "The app uses cryptographic primitives that are appropriate for the particular use-case, configured with parameters that adhere to industry best practices.",
203
+ "caption": "",
204
+ "description": "",
205
+ "tools": ""
206
+ },
207
+ {
208
+ "key": "the_app_does_not_use_deprecated_cryptographic_protocols_or_algorithms",
209
+ "title": "The app does not use cryptographic protocols or algorithms that are widely considered depreciated for security purposes.",
210
+ "caption": "",
211
+ "description": "",
212
+ "tools": ""
213
+ },
214
+ {
215
+ "key": "app_does_not_reuse_keys_for_multiple_purposes",
216
+ "title": "The app does not reuse the same cryptographic key for multiple purposes.",
217
+ "caption": "",
218
+ "description": "",
219
+ "tools": ""
220
+ },
221
+ {
222
+ "key": "all_random_values_are_generated_using_a_sufficiently_secure_random_number_generator",
223
+ "title": "All random values are generated using a sufficiently secure random number generator.",
224
+ "caption": "",
225
+ "description": "",
226
+ "tools": ""
227
+ }
228
+ ]
229
+ },
230
+ {
231
+ "key": "authentication_and_session_management",
232
+ "title": "Authentication and Session Management",
233
+ "description": "",
234
+ "type": "checklist",
235
+ "items": [
236
+ {
237
+ "key": "app_should_have_authenticated_remote_services",
238
+ "title": "If the app provides users access to a remote service, some form of authentication, such as username/password authentication, is performed at the remote endpoint.",
239
+ "caption": "",
240
+ "description": "",
241
+ "tools": ""
242
+ },
243
+ {
244
+ "key": "randomly_generated_session_identifiers_used_in_stateful_session",
245
+ "title": "If stateful session management is used, the remote endpoint uses randomly generated session identifiers to authenticate client requests without sending the user credentials.",
246
+ "caption": "",
247
+ "description": "",
248
+ "tools": ""
249
+ },
250
+ {
251
+ "key": "server_provides_signed_auth_tokens",
252
+ "title": "If stateless token-based authentication is used, the server provides a token that has been signed using a secure algorithm.",
253
+ "caption": "",
254
+ "description": "",
255
+ "tools": ""
256
+ },
257
+ {
258
+ "key": "session_is_terminated_on_logout",
259
+ "title": "The remote endpoint terminates the existing session when the user logs out.",
260
+ "caption": "",
261
+ "description": "",
262
+ "tools": ""
263
+ },
264
+ {
265
+ "key": "a_password_policy_exists_and_is_enforced_at_the_remote_endpoint",
266
+ "title": "A password policy exists and is enforced at the remote endpoint.",
267
+ "caption": "",
268
+ "description": "",
269
+ "tools": ""
270
+ },
271
+ {
272
+ "key": "number_of_allowed_credential_submission_should_be_limited",
273
+ "title": "The remote endpoint implements a mechanism to protect against the submission of credentials an excessive number of times.",
274
+ "caption": "",
275
+ "description": "",
276
+ "tools": ""
277
+ },
278
+ {
279
+ "key": "session_is_invalidated_and_tokens_expire_on_long_inactivity",
280
+ "title": "Sessions are invalidated at the remote endpoint after a predefined period of inactivity and access tokens expire.",
281
+ "caption": "",
282
+ "description": "",
283
+ "tools": ""
284
+ },
285
+ {
286
+ "key": "keystore_or_keychain_based_biometric_auth",
287
+ "title": "Biometric authentication, if any, is not event-bound (i.e. using an API that simply returns true or false). Instead, it is based on unlocking the keychain/keystore.",
288
+ "caption": "",
289
+ "description": "",
290
+ "tools": ""
291
+ },
292
+ {
293
+ "key": "consistent_enforcement_of_two_factor_auth",
294
+ "title": "A second factor of authentication exists at the remote endpoint and the 2FA requirement is consistently enforced.",
295
+ "caption": "",
296
+ "description": "",
297
+ "tools": ""
298
+ },
299
+ {
300
+ "key": "sensitive_transactions_require_step_up_authentication",
301
+ "title": "Sensitive transactions require step-up authentication.",
302
+ "caption": "",
303
+ "description": "",
304
+ "tools": ""
305
+ },
306
+ {
307
+ "key": "login_activities_are_available",
308
+ "title": "The app informs the user of all login activities with their account. Users are able view a list of devices used to access the account, and to block specific devices.",
309
+ "caption": "",
310
+ "description": "",
311
+ "tools": ""
312
+ }
313
+ ]
314
+ },
315
+ {
316
+ "key": "network_communication",
317
+ "title": "Network Communication",
318
+ "description": "",
319
+ "type": "checklist",
320
+ "items": [
321
+ {
322
+ "key": "tls_encryption_in_network",
323
+ "title": "Data is encrypted on the network using TLS. The secure channel is used consistently throughout the app.",
324
+ "caption": "",
325
+ "description": "",
326
+ "tools": ""
327
+ },
328
+ {
329
+ "key": "standard_tls_settings_following_current_best_practices",
330
+ "title": "The TLS settings are in line with current best practices, or as close as possible if the mobile operating system does not support the recommended standards.",
331
+ "caption": "",
332
+ "description": "",
333
+ "tools": ""
334
+ },
335
+ {
336
+ "key": "certificates_signed_from_trusted_sources",
337
+ "title": "The app verifies the X.509 certificate of the remote endpoint when the secure channel is established. Only certificates signed by a trusted CA are accepted.",
338
+ "caption": "",
339
+ "description": "",
340
+ "tools": ""
341
+ },
342
+ {
343
+ "key": "app_does_not_establish_connection_for_a_different_certificate",
344
+ "title": "The app either uses its own certificate store, or pins the endpoint certificate or public key, and subsequently does not establish connections with endpoints that offer a different certificate or key, even if signed by a trusted CA.",
345
+ "caption": "",
346
+ "description": "",
347
+ "tools": ""
348
+ },
349
+ {
350
+ "key": "app_does_not_rely_on_single_insecure_communication_connection_for_critical_operations",
351
+ "title": "The app does not rely on a single insecure communication channel (email or SMS) for critical operations, such as enrollments and account recovery.",
352
+ "caption": "",
353
+ "description": "",
354
+ "tools": ""
355
+ },
356
+ {
357
+ "key": "app_only_depends_on_up_to_date_connectivity_and_security_libraries",
358
+ "title": "The app only depends on up-to-date connectivity and security libraries.",
359
+ "caption": "",
360
+ "description": "",
361
+ "tools": ""
362
+ }
363
+ ]
364
+ },
365
+ {
366
+ "key": "platform_interaction",
367
+ "title": "Platform Interaction",
368
+ "description": "",
369
+ "type": "checklist",
370
+ "items": [
371
+ {
372
+ "key": "tls_encryption_in_network",
373
+ "title": "The app only requests the minimum set of permissions necessary.",
374
+ "caption": "",
375
+ "description": "",
376
+ "tools": ""
377
+ },
378
+ {
379
+ "key": "input_data_is_validated_and_sanitized",
380
+ "title": "All inputs from external sources and the user are validated and if necessary sanitized. This includes data received via the UI, IPC mechanisms such as intents, custom URLs, and network sources.",
381
+ "caption": "",
382
+ "description": "",
383
+ "tools": ""
384
+ },
385
+ {
386
+ "key": "app_does_not_export_sensitive_functionality_via_custom_url_schemes",
387
+ "title": "The app does not export sensitive functionality via custom URL schemes, unless these mechanisms are properly protected.",
388
+ "caption": "",
389
+ "description": "",
390
+ "tools": ""
391
+ },
392
+ {
393
+ "key": "app_does_not_export_sensitive_functionality_via_ipc_facilities",
394
+ "title": "The app does not export sensitive functionality through IPC facilities, unless these mechanisms are properly protected.",
395
+ "caption": "",
396
+ "description": "",
397
+ "tools": ""
398
+ },
399
+ {
400
+ "key": "java_script_is_disabled_in_web_views_unless_explicitly_required",
401
+ "title": "JavaScript is disabled in WebViews unless explicitly required.",
402
+ "caption": "",
403
+ "description": "",
404
+ "tools": ""
405
+ },
406
+ {
407
+ "key": "web_views_are_configured_to_allow_only_the_minimum_set_of_protocol_handlers_required",
408
+ "title": "WebViews are configured to allow only the minimum set of protocol handlers required (ideally, only https is supported). Potentially dangerous handlers, such as file, tel and app-id, are disabled.",
409
+ "caption": "",
410
+ "description": "",
411
+ "tools": ""
412
+ },
413
+ {
414
+ "key": "if_native_methods_are_exposed_in_web_view_verify_js_rendered_comes_from_within_the_package",
415
+ "title": "If native methods of the app are exposed to a WebView, verify that the WebView only renders JavaScript contained within the app package.",
416
+ "caption": "",
417
+ "description": "",
418
+ "tools": ""
419
+ },
420
+ {
421
+ "key": "object_deserialization_if_any_is_implemented_using_safe_serialization_ap_is",
422
+ "title": "Object deserialization, if any, is implemented using safe serialization APIs.",
423
+ "caption": "",
424
+ "description": "",
425
+ "tools": ""
426
+ }
427
+ ]
428
+ },
429
+ {
430
+ "key": "code_quality_and_build_settings",
431
+ "title": "Code Quality and Build Settings",
432
+ "description": "",
433
+ "type": "checklist",
434
+ "items": [
435
+ {
436
+ "key": "app_is_signed_and_provisioned_with_a_valid_certificate_with_protected_private_key",
437
+ "title": "The app is signed and provisioned with a valid certificate, of which the private key is properly protected.",
438
+ "caption": "",
439
+ "description": "",
440
+ "tools": ""
441
+ },
442
+ {
443
+ "key": "app_is_built_in_release_mode",
444
+ "title": "The app has been built in release mode, with settings appropriate for a release build (e.g. non-debuggable).",
445
+ "caption": "",
446
+ "description": "",
447
+ "tools": ""
448
+ },
449
+ {
450
+ "key": "debugging_symbols_have_been_removed_from_native_binaries",
451
+ "title": "Debugging symbols have been removed from native binaries.",
452
+ "caption": "",
453
+ "description": "",
454
+ "tools": ""
455
+ },
456
+ {
457
+ "key": "debugging_code_has_been_removed_and_the_app_does_not_log_verbose_errors_or_debugging_messages",
458
+ "title": "Debugging code has been removed, and the app does not log verbose errors or debugging messages.",
459
+ "caption": "",
460
+ "description": "",
461
+ "tools": ""
462
+ },
463
+ {
464
+ "key": "third_party_components_used_by_app_are_identified_and_checked_for_known_vulnerabilities",
465
+ "title": "All third party components used by the mobile app, such as libraries and frameworks, are identified, and checked for known vulnerabilities.",
466
+ "caption": "",
467
+ "description": "",
468
+ "tools": ""
469
+ },
470
+ {
471
+ "key": "the_app_catches_and_handles_possible_exceptions",
472
+ "title": "The app catches and handles possible exceptions.",
473
+ "caption": "",
474
+ "description": "",
475
+ "tools": ""
476
+ },
477
+ {
478
+ "key": "error_handling_logic_in_security_controls_denies_access_by_default",
479
+ "title": "Error handling logic in security controls denies access by default.",
480
+ "caption": "",
481
+ "description": "",
482
+ "tools": ""
483
+ },
484
+ {
485
+ "key": "in_unmanaged_code_memory_is_allocated_freed_and_used_securely",
486
+ "title": "In unmanaged code, memory is allocated, freed and used securely.",
487
+ "caption": "",
488
+ "description": "",
489
+ "tools": ""
490
+ },
491
+ {
492
+ "key": "security_features_offered_by_the_toolchain_are_activated",
493
+ "title": "Free security features offered by the toolchain, such as byte-code minification, stack protection, PIE support and automatic reference counting, are activated.",
494
+ "caption": "",
495
+ "description": "",
496
+ "tools": ""
497
+ }
498
+ ]
499
+ },
500
+ {
501
+ "key": "upload_logs",
502
+ "title": "Upload logs",
503
+ "description": "This should include all associated traffic associated to the in-scope targets.",
504
+ "type": "large_upload"
505
+ },
506
+ {
507
+ "key": "executive_summary",
508
+ "title": "Executive summary",
509
+ "description": "The executive summary should be written with a high-level view of both risk and business impact. It should be concise and clear, therefore it is important to use plain English. This ensures that non-technical readers can gain insight into security concerns outlined in your report.",
510
+ "type": "executive_summary"
511
+ }
512
+ ]
513
+ }
514
+ }