telling the time
play

Telling The Time chris.anley@nccgroup.trust The Bug Server - PowerPoint PPT Presentation

Telling The Time chris.anley@nccgroup.trust The Bug Server generates a time-based: -Password reset token -Session id -Random password -REST API Key ... For example: PHP uniqid() Gets a prefixed unique identifier based on the current


  1. Telling The Time chris.anley@nccgroup.trust

  2. The Bug Server generates a time-based: -Password reset token -Session id -Random password -REST API Key ...

  3. For example: PHP uniqid() “Gets a prefixed unique identifier based on the current time in microseconds.” CAUTION NOT SECURE WARNING NOT UNIQUE (?!) blah blah SECURE blah UNIQUE blah ...

  4. Check Github $token = uniqid(); // 57eb8c5bbf47b; time $token = md5(uniqid()); // 41eced92fef729c756... time $pwd = substr(md5(uniqid()),0,8);// 41eced92; time srand((double) microtime() * 1000000); $token = md5(uniqid(rand())); // time,time $password = md5(uniqid($session, true));//time,known,time $password = md5(uniqid(time(), true));// time,time,time

  5. Let’s Take a Moment A microsecond is a *really* short period of time “Lightning fast” - a lightning flash takes ~200,000 microseconds. “In the blink of an eye” ~100,000 microseconds “In a flash” ~1000 microseconds British Army L115A3 rifle muzzle velocity: 938 m/s = ~1mm per 1 µ s

  6. The Target - Reset <?php // resetPwd.php date_default_timezone_set("GMT"); ... $pwd = uniqid(); file_put_contents('/tmp/pwd', $pwd ); ...

  7. The Target - Login <?php // login.php $pwd = $_GET['password']; $target = file_get_contents('/tmp/pwd'); if( strcmp( $pwd, $target ) == 0 ) { print("Access Granted<br>"); print("target: $target\\n<BR>"); print(phpinfo()); }

  8. Methodology Could use - ntp, icmp timestamp, snmp, web app... RFC 2616: Origin servers MUST include a Date header field in all responses except: 100,101,500,503 or no clock. If no clock, MUST NOT use expires or last-modified (ie. uncacheable). But date has a resolution of 1,000,000 µ s... (!)

  9. Known Unknowns Find a script with similar timing to the password reset script. Request this many times to find the clock di ff . Date resolution is 1,000,000 µ s, but there's an edge. Correct for distance from the edge. Apply this di ff erence. Brute force (0, 1, -1, 2, -2, 3, -3...)

  10. Req Duration - Metropolitan Frequency 180 150 120 90 60 30 0 17900 20100 22300 24500 26700 28900 31100 33300 35500 Microsecond Req Duration - Leatherhead to Telecity (SOV), Docklands (~30km) 200 µ sec resolution.

  11. Results - Metropolitan Frequency 18 15 12 9 6 3 0 -13200 -11000 -8800 -6600 -4400 -2200 0 2200 Microsecond Error in Brute Force - Leatherhead to Telecity (SOV), Docklands (~30km) 200 µ sec resolution.

  12. Results - Antipodes Frequency 12 10 8 6 4 2 0 -157000 -141000 -125000 -109000 -93000 -77000 -61000 -45000 -29000 -13000 3000 Microsecond Error in Brute Force - Leatherhead to Sydney (ec2), ~17000km, 2000 µ sec resolution.

  13. But what does it mean? We can brute force the µ s time at which a web script will generate a token in: LAN: ~500 requests Metropolitan Area: ~1000 requests (~30 seconds) Antipodes, tiny server: ~40,000 requests (~1 hour) ...without trying very hard...

  14. Questions? Improvements: - Frequency buckets. - Faster client environment. - Reliability testing; use a better network. We haven’t talked about: - Local brute force. - Millisecond brute force. - Remote timing attacks in the literature. - All the many situations in which this is useful...

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend