+3

Một số cách ngăn chặn tấn công MITM đối với Android

Để tạo kết nối an toàn trong ứng dụng Android của bạn và ngăn chặn các cuộc tấn công Man-in-the-Middle (MITM), bạn nên tuân thủ các phương pháp tốt nhất để triển khai giao tiếp mạng an toàn. Dưới đây là hướng dẫn chi tiết về cách thực hiện điều này:

1. Sử dụng HTTPS

Đảm bảo tất cả các giao tiếp mạng của bạn đều sử dụng HTTPS thay vì HTTP. HTTPS mã hóa dữ liệu truyền giữa máy khách và máy chủ, ngăn chặn các cuộc tấn công MITM.

2. Thực hiện SSL Pinning

SSL pinning là việc gắn kết chứng chỉ SSL của máy chủ với ứng dụng của bạn. Điều này ngăn chặn kẻ tấn công sử dụng chứng chỉ bị xâm nhập hoặc CA giả mạo để chặn dữ liệu của bạn.

Cách thực hiện SSL Pinning trong Android:

Sử dụng OkHttp (thư viện HTTP client phổ biến cho Android):

  1. Thêm dependency vào file build.gradle của bạn:

    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    
  2. Tạo một OkHttpClient tùy chỉnh với chứng chỉ đã pin:

    import okhttp3.CertificatePinner;
    import okhttp3.OkHttpClient;
    
    public class MyHttpClient {
        public OkHttpClient getClient() {
            CertificatePinner certificatePinner = new CertificatePinner.Builder()
                .add("yourdomain.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
                .build();
    
            return new OkHttpClient.Builder()
                .certificatePinner(certificatePinner)
                .build();
        }
    }
    
  3. Thay thế "yourdomain.com" bằng domain của máy chủ bạn và hash bằng SHA-256 hash của chứng chỉ máy chủ. Bạn có thể lấy SHA-256 hash bằng cách sử dụng các công cụ như OpenSSL.

Sử dụng Retrofit (HTTP client an toàn và hiệu quả cho Android và Java):

  1. Thêm các dependency Retrofit và OkHttp vào build.gradle của bạn:

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    
  2. Tạo một instance Retrofit với OkHttpClient đã pin:

    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    
    public class MyRetrofitClient {
        public Retrofit getRetrofit() {
            OkHttpClient client = new MyHttpClient().getClient();
    
            return new Retrofit.Builder()
                .baseUrl("https://yourdomain.com")
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        }
    }
    

3. Xác thực Chứng chỉ SSL

Đảm bảo rằng các chứng chỉ SSL là hợp lệ và không bị hết hạn. Theo mặc định, hệ thống Android và OkHttp xử lý việc xác thực chứng chỉ, nhưng bạn có thể thêm các biện pháp bổ sung nếu cần thiết.

4. Sử dụng Cấu hình Bảo mật Mạng

Đối với các ứng dụng nhắm đến Android Nougat (API level 24) hoặc cao hơn, bạn có thể sử dụng tính năng Network Security Configuration để cấu hình các cài đặt bảo mật như bắt buộc sử dụng HTTPS và chỉ định các CA tin cậy trực tiếp trong file tài nguyên.

  1. Tạo một file XML trong res/xml/network_security_config.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="false">
            <domain includeSubdomains="true">yourdomain.com</domain>
            <pin-set expiration="2025-01-01">
                <pin digest="SHA-256">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</pin>
            </pin-set>
        </domain-config>
    </network-security-config>
    
  2. Tham chiếu file này trong AndroidManifest.xml:

    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config">
        ...
    </application>
    

5. Tránh Sử dụng WebView cho Các Hoạt động Nhạy Cảm

Nếu có thể, tránh sử dụng WebView cho các hoạt động nhạy cảm, vì nó có thể khó bảo mật hơn. Nếu bắt buộc phải sử dụng WebView, đảm bảo rằng bạn chỉ tải nội dung từ các nguồn tin cậy và tắt JavaScript nếu không cần thiết.

6. Cập Nhật Bảo Mật Thường Xuyên

Giữ cho ứng dụng của bạn và tất cả các thư viện được cập nhật để bảo vệ chống lại các lỗ hổng đã biết. Thường xuyên xem xét mã nguồn và các phụ thuộc để tìm kiếm các bản cập nhật bảo mật.

7. Làm Rối Mã

Làm rối mã của ứng dụng bằng cách sử dụng ProGuard hoặc R8 để làm khó khăn cho kẻ tấn công khi muốn dịch ngược ứng dụng và tìm ra các lỗ hổng.

8. Kiểm Tra Bảo Mật Thường Xuyên

Thường xuyên thực hiện kiểm tra bảo mật và kiểm tra thâm nhập để xác định và khắc phục các lỗ hổng trong ứng dụng của bạn.

Bằng cách tuân theo các bước này, bạn có thể cải thiện đáng kể bảo mật cho ứng dụng Android của mình và bảo vệ nó chống lại các cuộc tấn công MITM.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí