Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 24 апр 2019, 06:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 25 июл 2017, 14:34 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
seregin писал(а):
И статья по этому коду http://www.cs.columbia.edu/~mikepo/pape ... osec13.pdf

Вы можете пойти, в конце этой публикации, в библиографию, там 35 наименований, слава Богу ... и пойти по их ссылкам по этой тематике.
Все они, в большинстве, крутятся вокруг обсуждений сообщения Anthony Lineberry на конференции Black Hat Europe April 2009.
Вот, в частности, в LinuxJournal обсуждение - Anthony Lineberry on /dev/mem Rootkits
Цитата:
August 2009
Aug 01, 2009 By Mick Bauer
Изображение
At Black Hat Europe in mid-April 2009, Anthony Lineberry presented an interesting paper on how attackers with root privileges might use a /dev/mem rootkit, hiding their attacks by directly altering kernel memory.
...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 25 июл 2017, 14:40 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
А по поводу кода (модуля) сказано в тексте:
Цитата:
The pseudocode for scanning the low memory addresses of a 32-bit x86 system is shown in Figure 3.

Это очень важно, что этот код создавался для 32 бит системы.

Я думаю, главная причина ваших неудач по этой схеме состоит в том, что всё это описывается только для 32-бит адресации.
А способы адресации, структуры данных, ... и даже архитектура системных вызовов (всех сетевых, например) в ядре для 32 и 64 бит реализаций радикально отличаются, как небо и земля ;-) (это в пользовательском пространстве они почти одинаковы, похожи, но в ядре это совсем не так).

Если вам позарез нужно добить этот способ - попробуйте обкатать его в 32-бит системе.
У вас нет 32-бит системы? ;-)
Вы можете легко это сделать установив по-быстренькому под VirtualBox.
Обычно этот номер проходит.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 25 июл 2017, 14:51 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
А способы адресации, структуры данных, ... и даже архитектура системных вызовов (всех сетевых, например) в ядре для 32 и 64 бит реализаций радикально отличаются, как небо и земля ;-) (это в пользовательском пространстве они почти одинаковы, похожи, но в ядре это совсем не так).

А если (или когда :lol: ) вам захочется отследить различия между 32 и 64 бит (по коду ядра), то в помощь вам вот такие онлайновые ресурсы: Linux Cross Reference.
Потому что (по опыту!) отследить такие отличия по локальным исходникам, установленным на собственном компьютере, практически невозможно.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 25 июл 2017, 17:53 
Не в сети
Писатель

Зарегистрирован: 23 июл 2017, 12:46
Сообщения: 33
попробовал, также, ерунда) ладно буду писать, что не удалось выполнить задание :-(


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 25 июл 2017, 19:41 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
seregin писал(а):
попробовал, также, ерунда) ладно буду писать, что не удалось выполнить задание :-(

Можно, наверное, довести эту задачу до ума.
Но только это - совершенно неординарная задача, и уж никак не для студенческого курсового задания, такими руткитами занимаются совершенно неординарные программисты, никак не среднего уровня.
Для того, чтобы это осилить, нужно, для начала, очень много и очень внимательно читать: всё, что дано в библиографии статьи, с которой началась тема (35 публикаций) + то что дальше потянется ссылками из этих статей.
Это была бы действительно хорошая работа ... перелопатив весь этот материал сложить реализующий программный код.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 26 июл 2017, 12:30 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Все они, в большинстве, крутятся вокруг обсуждений сообщения Anthony Lineberry на конференции Black Hat Europe April 2009.
Вот, в частности, в LinuxJournal обсуждение - Anthony Lineberry on /dev/mem Rootkits
Цитата:
August 2009
Aug 01, 2009 By Mick Bauer
Изображение
At Black Hat Europe in mid-April 2009, Anthony Lineberry presented an interesting paper on how attackers with root privileges might use a /dev/mem rootkit, hiding their attacks by directly altering kernel memory.
...

Теперь меня уже самого заинтересовало их (авторов) обсуждение и можно ли с этой стороны ожидать каких-либо неприятностей в Linux? :cry:
Вообще то, все многочисленные обсуждения (2009г.) вокруг этих публикаций сводятся к простым вещам:
- тупо сканировать всю RAM память компьютера...
- в поисках той области, которая по признакам является клавиатурным буфером
- и главная нацеленность самих публикаций - использование GPU видеокарты, OpenCL для того, чтобы разгрузить CPU от сканирования памяти ... на манер того, как это делается в майнинге криптовалют.

Вопрос здесь главный в самих признаках: что станем искать?
seregin писал(а):
И статья по этому коду http://www.cs.columbia.edu/~mikepo/pape ... osec13.pdf

Цитата:
3.1 Locating the Keyboard Buffer
In Linux, an attached USB device is represented by a USB Request Block (URB) structure, defined in the linux/usb.h header file of the Linux source tree. Figure 2 shows the fields of the USB Request Block structure that are relevant for our work. For a USB keyboard device, in particular, the keyboard buffer is part of the URB structure, in the field transfer_buffer. Unfortunately, the memory offset where the URB structure is placed is different every time the system restarts.

Цитата:
...
struct usb_device *dev
...
void *transfer_buffer
dma_addr_t *transfer_dma
...
u32 *transfer_buffer_length
...
Figure 2: Fields of interest in the USB Request Block (URB) structure.

А вот и сами признаки того что ищем:
Цитата:
The pseudocode for scanning the low memory addresses of a 32-bit x86 system is shown in Figure 3. This approach is sufficient for memory allocated using kmalloc(), which always returns kernel virtual addresses that have a physical mapping (logical addresses) [8]. To locate the keyboard buffer, we begin to search for pointers to USB device structures. Such pointers are memory-aligned to 0x400 boundaries, and the corresponding transfer_dma fields are aligned to 0x20 boundaries. If both conditions are true, we check if the product field contains any of the substrings “usb” and “keyboard” (for wired USB keyboards), or “usb” and “receiver” (for wireless keyboard/mouse sets). As a final step, we check that the field transfer_buffer_length contains the appropriate length (8 bytes) and that it contains valid keystroke values, e.g., all bytes are zero if no key is pressed. For 32-bit systems, in which the kernel address space is at most 1 GB, the total search time in the worst case is just about 3.2 seconds.

Цитата:
Код:
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
for (i = 0; i < totalmem; i += 0x10) {
   struct urb *urbp = (struct urb *)__va(i);
   if (((urbp->dev % 0x400) == 0) &&
      ((urbp->transfer_dma % 0x20) == 0) &&
      (urbp->transfer_buffer_length == 8) &&
      (urbp->transfer_buffer != NULL) &&
      strncmp(urbp->dev->product, "usb", 32) &&
      strncmp(urbp->dev->product, "keyboard", 32)) {
/* potential match */
   }
}


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 26 июл 2017, 12:50 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Вопрос здесь главный в самих признаках: что станем искать?

В итоге, что мы у них имеем:
- это всё рассказано только для 32-бит системы
- откуда такие границы выравнивания? - это нужно ещё проверять ... и для 64-бит системы struct urb может существенно отличаться
- это всё относится только к USB-клавиатуре... да и то, они различают 2 случая: а). проводная USB-клавиатура и б). беспроводной USB комплект (приёмник) клавиатура+ мышь...
а как быть если попадётся компьютер с PS/2
а как быть с встроенной клавиатурой ноутбуков?
а как быть, если клавиатура и мышь подключены через USB коммутатор D-Link DKVM? ... вот такой, например:
Код:
[olej@xenix ~]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 2101:020f ActionStar
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Код:
[olej@xenix ~]$ lsusb -v -d 2101:020f

Bus 003 Device 002: ID 2101:020f ActionStar
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x2101 ActionStar
  idProduct          0x020f
  bcdDevice            0.01
  iManufacturer           0
  iProduct                0
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.01
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      63
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.01
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      72
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10


P.S. И не совсем понятно, зачем они возятся с GPU сканированием, если CPU у них сканирует всю память за 3 сек., а адрес искомой области меняется только при перезагрузке системы? (ну, возможно ещё, при механическом отключении-включении USB-клавиатуры на ходу).


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 26 июл 2017, 14:25 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
seregin писал(а):
Единственную информацию, которая я думаю подходит я нашел здесь: https://github.com/x0r1/Demon Там ищется буфер клавиатуры(наверно)
И статья по этому коду http://www.cs.columbia.edu/~mikepo/pape ... osec13.pdf

Вот та реализация на GIT, она действительно в точности наследует (повторяет) псевдокод из статьи.
Но этот код даже не компилируется!
Если уж кого заинтересует этот код (?), то в приложении файл, по крайней мере компилирующийся, собирающийся в модуль ядра:
Код:
[olej@xenix module_scan]$ make
make -C /lib/modules/4.11.10-200.fc25.x86_64/build SUBDIRS=/home/olej/WORK_2017/own.WORK/AntiHack/CapturingKeystrokes/Demon-master/module_scan modules
make[1]: вход в каталог «/usr/src/kernels/4.11.10-200.fc25.x86_64»
  CC [M]  /home/olej/WORK_2017/own.WORK/AntiHack/CapturingKeystrokes/Demon-master/module_scan/mod_scan.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/olej/WORK_2017/own.WORK/AntiHack/CapturingKeystrokes/Demon-master/module_scan/mod_scan.mod.o
  LD [M]  /home/olej/WORK_2017/own.WORK/AntiHack/CapturingKeystrokes/Demon-master/module_scan/mod_scan.ko
make[1]: выход из каталога «/usr/src/kernels/4.11.10-200.fc25.x86_64»

Но даже в таком виде его загрузка (insmod) заканчивается SIGSEGV - нарушением защиты памяти. :-o


Вложения:
mod_scan.c [2.19 КБ]
Скачиваний: 14
Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 27 июл 2017, 11:19 
Не в сети
Писатель

Зарегистрирован: 23 июл 2017, 12:46
Сообщения: 33
https://github.com/volatilityfoundation ... bioskbd.py находил такой плагин) по идее он ищет буфер) вот что писал разработчик этого плагина, я ему писал, спрашивал про буфер
Hmmm,

I'm afraid I'm not very well versed on the linux plugins. The
bioskbd.py reads real-mode memory and therefore is independent of the
operating system. I would still expect to find the data there, what
kind of a memory image are you using?

If you're trying to read directly from /dev/mem, that isn't really a
memory image and you might find that the linux kernel you're running
under doesn't allow access to that particular part of memory. I'd
recommend trying to acquire the memory some other way. There are
multiple tools for memory acquisition, but most are windows based.
Volatility itself doesn't do acquisition, it just reads pre-acquired
memory image files. As such, volatility doesn't read a specific file on
linux, it reads from a full memory dump which /dev/mem may not provide.

It sounds like your real question is "how can I access the full physical
memory of a machine from linux" and unfortunately I don't know that
answer to that. I hope that's been of some help?

Mike 5:)


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Клавиатурный буфер
Непрочитанное сообщениеДобавлено: 28 июл 2017, 01:16 
Не в сети
Писатель

Зарегистрирован: 23 июл 2017, 12:46
Сообщения: 33
а вот смотрите, у клавиатуры есть 60 порт, можно ли как-то с помощью ассемблера записать туда что нибудь и узнать адрес куда записалось это
или функции byte = inb (0x60);
вот статья http://albsig.hgesser.de/bs-ss2013/albs ... 2013-c.pdf (последние слайды)


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.203s | 16 Queries | GZIP : On ]