Атаки переполнения буфера

0 0 * * Thu bash -c '(($(date +\%s) / 86400 \% 14))' && your-script

Я использовал удар, чтобы сделать мою математику, потому что я ленив; переключатель, что к тому, что Вы любите. Я использую в своих интересах 1 января 1970, будучи четвергом; в течение других дней недели необходимо было бы применить смещение. Крону нужны знаки процента, которых оставляют.

Быстрая проверка:

function check {
  when=$(date --date="$1 $(($RANDOM % 24)):$(($RANDOM % 60))" --utc)
  echo -n "$when: "
  (($(date +%s --date="$when") / 86400 % 14)) && echo run || echo skip
}

for start in "2010-12-02" "2011-12-01"; do
  for x in $(seq 0 12); do
    check "$start + $(($x * 7)) days"
  done
  echo
done

Обратите внимание, что я выбрал случайные времена, чтобы показать, что это будет работать, если выполнено в любое время в четверг, и выбранные даты, которые пересекают границы года плюс, включают месяцы с и 4 и 5 четвергами.

Вывод:

Thu Dec  2 06:19:00 UTC 2010: run
Thu Dec  9 23:04:00 UTC 2010: skip
Thu Dec 16 05:37:00 UTC 2010: run
Thu Dec 23 12:49:00 UTC 2010: skip
Thu Dec 30 03:59:00 UTC 2010: run
Thu Jan  6 11:29:00 UTC 2011: skip
Thu Jan 13 13:23:00 UTC 2011: run
Thu Jan 20 20:33:00 UTC 2011: skip
Thu Jan 27 16:48:00 UTC 2011: run
Thu Feb  3 17:43:00 UTC 2011: skip
Thu Feb 10 05:49:00 UTC 2011: run
Thu Feb 17 08:46:00 UTC 2011: skip
Thu Feb 24 06:50:00 UTC 2011: run

Thu Dec  1 21:40:00 UTC 2011: run
Thu Dec  8 23:24:00 UTC 2011: skip
Thu Dec 15 22:27:00 UTC 2011: run
Thu Dec 22 02:47:00 UTC 2011: skip
Thu Dec 29 12:44:00 UTC 2011: run
Thu Jan  5 17:59:00 UTC 2012: skip
Thu Jan 12 18:31:00 UTC 2012: run
Thu Jan 19 04:51:00 UTC 2012: skip
Thu Jan 26 08:02:00 UTC 2012: run
Thu Feb  2 17:37:00 UTC 2012: skip
Thu Feb  9 14:08:00 UTC 2012: run
Thu Feb 16 18:50:00 UTC 2012: skip
Thu Feb 23 15:52:00 UTC 2012: run
3
24.05.2011, 00:32
2 ответа

Процесс не может читать или записать или перейти вне его памяти. Это означает, что не может получить доступ к памяти других процессов, или освобожденной памяти или памяти ядра. Таким образом, даже если взломщик инициировал переполнение буфера в процессе и может выполнить произвольный код в контексте того процесса, который не предоставляет доступ уровня ядра взломщика.

Существует один выход: процессы могут сделать системные вызовы. Точный способ, которым сделаны системные вызовы, зависит от ОС и типа процессора; в его самой простой форме процессор имеет инструкцию “по системному вызову”. который переходит к конкретному адресу, где ядро установило код обработки системного вызова.

Когда системный вызов выполняется, процессор изменяет права доступа на памяти. Таким образом, выполнения ядра с поднятыми полномочиями, включая способность читать, пишут и переходят ко всей памяти и способности получить доступ к устройствам. Снова, детали того, как расширение полномочий выполняется, зависят высоко от того, как системный вызов реализовал на конкретной платформе; например, процессор мог бы сохранить две таблицы управления доступом (один для пространства пользователя и один для пространства ядра), и инструкция по системному вызову могла бы переключиться между этими двумя таблицами.

Код ядра, который обрабатывает системные вызовы, декодирует аргументы, передал процесс (как аргументы передаются, снова очень зависимо от платформы). Это может произойти, что системный вызов действительно проверяет эти аргументы правильно. Например, если ядро ожидает аргумент Array и не проверяет, что целый массив вписывается в адресное пространство процесса, которое может привести к обычному процессу, выполняющему атаку переполнения буфера против ядра и способность выполнить код ядра его выбора.

Чтобы удаленный взломщик получил доступ уровня ядра, обычно требует использования двух уязвимостей, один в сетевом процессе и один в ядре. Иногда существует ошибка в коде сетевой обработки ядра, который разрешает нападение с одним шагом.

4
27.01.2020, 21:20

Нет. Пространство ядра защищено на большей части архитектуры процессором и, если нет ошибка в операционной системе, попытка записать там привела бы к завершению процесса.

Атака переполнения буфера (обычно) перезаписывает обратный адрес функции, которая повреждает поток управления в руках взломщика.

0
27.01.2020, 21:20

Теги

Похожие вопросы