Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Your App is a Giant DDOS Botnet and Other Reaso...

Avatar for Sanae Rosen Sanae Rosen
November 30, 2018

Your App is a Giant DDOS Botnet and Other Reasons to Manage and Monitor Your Network Traffic

Presented at Droidcon SF 2018

Avatar for Sanae Rosen

Sanae Rosen

November 30, 2018

Other Decks in Technology

Transcript

  1. Sanae Rosen [email protected] Your App is a Giant DDOS Botnet

    and Other Reasons to Manage and Monitor Your Network Traffic
  2. Sanae Rosen Since early 2017: Software Engineer, Core Android team

    PhD related to mobile networking About me
  3. What if we log all 5xx server errors? What if

    we retry all failed analytics?
  4. What about experiments? Feature 1 Experiment 1 Experiment server: Experiment

    1: on Experiment 2: on Feature 2 Experiment 2 The app Main server
  5. What about experiments? Feature 1 Experiment 1 Experiment server: Experiment

    1: on Experiment 2: off Feature 2 Experiment 2 The app Main server
  6. What about experiments? • What if experiments break? • What

    if you forget to use an experiment? • What about infrastructure problems?
  7. class TrafficMonitorInterceptor( val monitor: NetworkMonitor ) : Interceptor { override

    fun intercept(chain: Chain): Response { val request = chain.request() monitor.record(request) if (monitor.shouldDropRequest(request)) { return monitor.generateErrorResponse() } val response = chain.proceed(request) monitor.record(response) return response } }
  8. class TrafficMonitorInterceptor( val monitor: NetworkMonitor ) : Interceptor { override

    fun intercept(chain: Chain): Response { val request = chain.request() monitor.record(request) if (monitor.shouldDropRequest(request)) { return monitor.generateErrorResponse() } val response = chain.proceed(request) monitor.record(response) return response } }
  9. class TrafficMonitorInterceptor( val monitor: NetworkMonitor ) : Interceptor { override

    fun intercept(chain: Chain): Response { val request = chain.request() monitor.record(request) if (monitor.shouldDropRequest(request)) { return monitor.generateErrorResponse() } val response = chain.proceed(request) monitor.record(response) return response } }
  10. class TrafficMonitorInterceptor( val monitor: NetworkMonitor ) : Interceptor { override

    fun intercept(chain: Chain): Response { val request = chain.request() monitor.record(request) if (monitor.shouldDropRequest(request)) { return monitor.generateErrorResponse() } val response = chain.proceed(request) monitor.record(response) return response } }
  11. class TrafficMonitorInterceptor( val monitor: NetworkMonitor ) : Interceptor { override

    fun intercept(chain: Chain): Response { val request = chain.request() monitor.record(request) if (monitor.shouldDropRequest(request)) { return monitor.generateErrorResponse() } val response = chain.proceed(request) monitor.record(response) return response } } Look! Kotlin!
  12. Idea 1: Do it like experiments How to turn endpoints

    off? Network monitor server Endpoint 1: on Endpoint 2: off The app Main server Network monitor Network monitor server Endpoint 1: on Endpoint 2: off
  13. Idea 1: Do it like experiments • What if the

    network monitor server goes down? • High complexity How to turn endpoints off? Network monitor server Endpoint 1: on Endpoint 2: off The app Main server Network monitor Network monitor server Endpoint 1: on Endpoint 2: off
  14. Main server Can be endpoint-specific too Endpoint 1 The app

    CDN Network monitor 556 error code Network monitor Endpoint 2
  15. • What about the subtler problems? ◦ Only slightly bad

    data usage ◦ Problems with only a few devices Stage 2: the network monitor
  16. Stage 2: the network monitor Network logs Feature 1 Experiment

    server Feature 2 The app Main server Network monitor
  17. Stage 2: the network monitor 2 kb Network controller and

    monitor Data: 2 kb Network requests: 1 Time: 4 min
  18. Stage 2: the network monitor 4 kb Network controller and

    monitor Data: 6 kb Network requests: 2 Time: 7 min
  19. Stage 2: the network monitor Data: 6 kB Network requests:

    2 Time: 10 Network controller and monitor Data: 0 kb Network requests: 0 Time: 0 min
  20. • Can also flag high traffic in the outgoing logs

    ◦ Based on a per-endpoint config • “Endpoint” is a fairly flexible concept - can track related endpoints together Other details
  21. Problem 2: How cellular networks work Network traffic energy Tail

    timer #1 Tail timer #2 Time Energy Time Energy Periodic traffic Batched traffic
  22. Piggyback logs on other requests 10 minutes Logs not quite

    accurate, but no problem to detect Network traffic Logs sent 10 minutes Logs accurate, and something’s gone wrong Network traffic Logs sent
  23. • Coming before droidcon soon! • Set up so you

    can extend it to be compatible with things other than okhttp Next steps: Open source