Friday, December 5, 2008

Quik Note: Мониторинг и отладка

  • ps -eafw отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (единожды)
  • ps -e -o pid,args --forest вывести PID'ы и процессы в виде дерева
  • pstree отобразить дерево процессов
  • kill -TERM 98989 Корректно завершить процесс с PID 98989
  • kill -1 98989 заставить процесс с PID 98989 перепрочитать файл конфигурации
  • kill -HUP 98989
  • lsof -p 98989 отобразить список файлов, открытых процессом с PID 98989
  • lsof /home/user1 отобразить список открытых файлов из директории /home/user1
  • strace -c ls >/dev/null вывести список системных вызовов, созданных и полученных процессом ls
  • strace -f -e open ls >/dev/null вывести вызовы бибилотек
  • watch -n1 'cat /proc/interrupts' отображать прерывания в режиме реального времени
  • last reboot отобразить историю перезагрузок системы
  • last user1 отобразить историю регистрации пользователя user1 в системе и время его нахождения в ней
  • lsmod вывести загруженные модули ядра
  • free -m показать состояние оперативной памяти в мегабайтах
  • smartctl -A /dev/hda контроль состояния жёсткого диска /dev/hda через SMART
  • smartctl -i /dev/hda проверить доступность SMART на жёстком диске /dev/hda
  • tail /var/log/dmesg вывести десять последних записей из журнала загрузки ядра
  • tail /var/log/messages вывести десять последних записей из системного журнал

Quick Note: iptables

  • iptables -t filter -nL отобразить все цепочки правил
  • iptables -nL
  • iptables -t nat -L отобразить все цепочки правил в NAT-таблице
  • iptables -t filter -F очистить все цепочки правил в filter-таблице
  • iptables -F
  • iptables -t nat -F очистить все цепочки правил в NAT-таблице
  • iptables -t filter -X удалить все пользовательские цепочки правил в filter-таблице
  • iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT позволить входящее подключение telnet'ом
  • iptables -t filter -A OUTPUT -p tcp --dport http -j DROP блокировать исходящие HTTP-соединения
  • iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT позволить "прокидывать" (forward)


Quik Note: Команды для настройки SAMBA

  • nbtscan ip_addr разрешить netbios-имя nbtscan не во всех системах ставится по-умолчанию, возможно, придётся доустанавливать вручную. nmblookup включен в пакет samba.
  • nmblookup -A ip_addr
  • smbclient -L ip_addr/hostname отобразить ресурсы, предоставленные в общий доступ на windows-машине
  • smbget -Rr smb://ip_addr/share подобно wget может получить файлы с windows-машин через smb-протокол
  • mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share смонтировать smb-ресурс, предоставленный на windows-машине, в локальную файловую систему

Quik Note: Команды для работы с сетью

  • ifconfig eth0 promisc перевести интерфейс eth0 в promiscuous-режим для "отлова" пакетов (sniffing)
  • ifconfig eth0 -promisc отключить promiscuous-режим на интерфейсе eth0
  • route -n вывести локальную таблицу маршрутизации
  • netstat -rn route add -net 0/0 gw IP_Gateway задать ip-адрес шлюза по умолчанию (default gateway)
  • route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 добавить статический маршрут в сеть 192.168.0.0/16 через шлюз с ip-адресом 192.168.1.1
  • route del 0/0 gw IP_gateway удалить ip-адрес шлюза по умолчанию (default gateway)
  • host http://www.linuxguide.it разрешить имя http://www.linuxguide.it хоста в ip-адрес и наоборот
  • tcpdump tcp port 80 отобразить весь трафик на TCP-порт 80 (обычно - HTTP)

Quik Note: Команды для работы с CDROM

  • cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force очистить RW диск
  • mkisofs /dev/cdrom > cd.iso создать iso с CD диска
  • mkisofs /dev/cdrom | gzip > cd_iso.gz создать сжатый ISO образ с CD диска
  • mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd создать ISO образ из папки
  • cdrecord -v dev=/dev/cdrom cd.iso записать CD
  • gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - записать сжатый ISO диск
  • mount -o loop cd.iso /mnt/iso примонтировать ISO образ
  • cd-paranoia -B срипать музыку с CD диска

Quik Note: Преобразование наборов символов и файловых форматов

  • dos2unix filedos.txt fileunix.txt конвертировать файл текстового формата из MSDOS в UNIX (разница в символах возврата коретки)
  • unix2dos fileunix.txt filedos.txt конвертировать файл текстового формата из UNIX в MSDOS (разница в символах возврата коретки)
  • recode ..HTML <> page.html конвертировать содержимое тестового файла page.txt в html-файл page.html
  • recode -l | more вывести список доступных форматов

Quik Note: RPM пакеты (Fedora, Red Hat и тому подобное)

  • rpm -U package.rpm обновить пакет без изменений конфигурационных файлов, в случае отсутствия пакета, он будет установлен
  • rpm -F package.rpm обновить пакет только если он установлен
  • rpm -qa | grep httpd среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd"
  • rpm -qi package_name вывести информацию о конкрентном пакете
  • rpm -qg "System Environment/Daemons" отобразить пакеты входящие в группу пакетов
  • rpm -ql package_name вывести список файлов, входящих в пакет
  • rpm -qc package_name вывести список конфигурационных файлов, входящих в пакет
  • rpm -q package_name --whatrequires вывести список пакетов, необходимых для установки конкретного пакета по зависимостям
  • rpm -q package_name --whatprovides show capability provided by a rpm package
  • rpm -q package_name --scripts отобразит скрипты, запускаемые при установке/удалении пакета
  • rpm -q package_name --changelog вывести историю ревизий пакета
  • rpm -qf /etc/httpd/conf/httpd.conf проверить какому пакету принадлежит указанный файл. Указывать следует полный путь и имя файла.
  • rpm -qp package.rpm -l отображает список файлов, входящих в пакет, но ещё не установленных в систему
  • rpm --import /media/cdrom/RPM-GPG-KEY ипортировать публичный ключ цифровой подписи
  • rpm --checksig package.rpm проверит подпись пакета
  • rpm -qa gpg-pubkey проверить целостность установленного содержимого пакета
  • rpm -V package_name проверить размер, полномочия, тип, владельца, группу, MD5-сумму и дату последнего изменеия пакета
  • rpm -Va проверить содержимое всех пакетов в системе. Выполняйте с осторожностью!
  • rpm -Vp package.rpm проверить пакет, который ещё не установлен в систему
  • rpm2cpio packet.rpm | cpio -idmuv --no-absolute-filenames
  • rpm2cpio package.rpm | cpio --extract --make-directories *bin* извлечь из пакета файлы содержащие в своём имени bin
  • rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm установить пакет, собранный из исходных кодов
  • rpmbuild --rebuild package_name.src.rpm собрать пакет из исходных кодов
  • yum clean headers удалить все заголовки файлов, которые система использует для разрешения зависимостей

Quik Note: Команды для архивирования и сжатия файлов

  • bunzip2 file1.bz2 разжимает файл 'file1.gz'
  • gunzip file1.gz
  • gzip file1 сжимает файл 'file1'
  • bzip2 file1
  • gzip -9 file1 сжать файл file1 с максимальным сжатием
  • rar a file1.rar test_file создать rar-архив 'file1.rar' и включить в него файл test_file
  • rar a file1.rar file1 file2 dir1 создать rar-архив 'file1.rar' и включить в него file1, file2 и dir1
  • rar x file1.rar распаковать rar-архив
  • unrar x file1.rar
  • tar -cvf archive.tar file1 создать tar-архив archive.tar, содержащий файл file1
  • tar -cvf archive.tar file1 file2 dir1 создать tar-архив archive.tar, содержащий файл file1, file2 и dir1
  • tar -tf archive.tar показать содержимое архива
  • tar -xvf archive.tar распаковать архив
  • tar -xvf archive.tar -C /tmp распаковать архив в /tmp
  • tar -cvfj archive.tar.bz2 dir1 создать архив и сжать его с помощью bzip2(Прим.переводчика. ключ -j работает не во всех *nix системах)
  • tar -xvfj archive.tar.bz2 разжать архив и распаковать его(Прим.переводчика. ключ -j работает не во всех *nix системах)
  • tar -cvfz archive.tar.gz dir1 создать архив и сжать его с помощью gzip
  • tar -xvfz archive.tar.gz разжать архив и распаковать его
  • zip file1.zip file1 создать сжатый zip-архив
  • zip -r file1.zip file1 file2 dir1 создать сжатый zip-архив и со включением в него нескольких файлов и/или директорий
  • unzip file1.zip разжать и распаковать zip-архив

Quik Note: Специальные атрибуты файлов


  • chattr +a file1 позволить открывать файл на запись только в режиме добавления
  • chattr +c file1 позволяет ядру автоматически сжимать/разжимать содержимое файла.
  • chattr +d file1 указавет утилите dump игнорировать данный файл во время выполнения backup'а
  • chattr +i file1 делает файл недоступным для любых изменений: редактирование, удаление, перемещение, создание линков на него.
  • chattr +s file1 позволяет сделать удаление файла безопасным, т.е. выставленный атрибут s говорит о том, что при удалении файла, место, занимаемое файлом на диске заполняется нулями, что предотвращяет возможность восстановления данных.
  • chattr +S file1 указывает, что, при сохранении изменений, будет произведена синхронизация, как при выполнении команды sync
  • chattr +u file1 данный атрибут указывает, что при удалении файла содержимое его будет сохранено и при необходимости пользователь сможет его восстановить lsattr показать атрибуты файлов

Quik Note: Выставление/изменение полномочий на файлы

  • find / -perm -u+s найти, начиная от корня, все файлы с выставленным SUID
  • chmod o+t /home/public назначить STIKY-бит директории /home/public. Позволяет удалять файлы только владельцам
  • chmod o-t /home/public снять STIKY-бит с директории /home/public

Quik Note: Пользователи и группы


  • groupmod -n new_group_name old_group_name переименовать группу old_group_name в new_group_name
  • useradd -c "Nome Cognome" -g admin -d /home/user1 -s /bin/bash user1 создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell'а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome
  • chage -E 2005-12-31 user1 установить дату окончания действия учётной записи пользователя user1
  • pwck проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow
  • grpck проверяет корректность системных файлов учётных записей. Проверяется файл/etc/group newgrp [-] group_name изменяет первичную группу текущего пользователя. Если указать "-", ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd

Quik Note: Дисковое пространство

  • df -h отображает информацию о смонтированных разделах с отображением общего, доступного и используемого пространства (Прим.переводчика. ключ -h работает не во всех *nix системах)
  • ls -lSr |more выдаёт список файлов и директорий рекурсивно с сортировкой по возрастанию размера и позволяет осуществлять постраничный просмотр
  • du -sh dir1 подсчитывает и выводит размер, занимаемый директорией 'dir1' (Прим.переводчика. ключ -h работает не во всех *nix системах)
  • du -sk * | sort -rn отображает размер и имена файлов и директорий, с соритровкой по размеру
  • rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n показывает размер используемого дискового пространства, занимаемое файлами rpm-пакета, с сортировкой по размеру (fedora, redhat и т.п.)
  • dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n показывает размер используемого дискового пространства, занимаемое файлами deb-пакета, с сортировкой по размеру (ubuntu, debian т.п.)

Quik Note: Команды для монтирования файловых систем

  • fuser -km /mnt/hda2 принудительное размонтирование раздела. Применяется в случае, когда раздел занят каким-либо пользователем
  • umount -n /mnt/hda2 выполнить размонитрование без занесения информации в /etc/mtab. Полезно когда файл имеет атрибуты "только чтение" или недостаточно места на диске
  • mount /dev/fd0 /mnt/floppy монтировать флоппи-диск
  • mount -o loop file.iso /mnt/cdrom смонтировать ISO-образ
  • mount -t vfat /dev/hda5 /mnt/hda5 монтировать файловую систему Windows FAT32
  • mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share монтировать сетевую файловую систему Windows (SMB/CIFS)

Quik Note: Команды для поиска файлов

  • find /usr/bin -type f -atime +100 найти все файлы в '/usr/bin', время последнего обращения к которым более 100 дней
  • find /usr/bin -type f -mtime -10 найти все файлы в '/usr/bin', созданные или изменённые в течении последних 10 дней
  • find / -xdev -name "*.rpm" найти все фалы и директории, имена которых оканчиваются на '.rpm', игнорируя съёмные носители, такие как cdrom, floppy и т.п.
  • whereis halt показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу 'halt'
  • which halt отображает полный путь к файлу 'halt'

Quik Note: Файлы и директории

  • ls -F отобразить содержимое текущей директории с добавлением к именам символов, храктеризующих тип
  • touch -t 0712250000 fileditest модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем (YYMMDDhhmm)

Quik Note: Команды для остановки системы

  • shutdown -h hours:minutes & запланировать остановку системы на указанное время
  • shutdown -c отменить запланированную по расписанию остановку системы
  • shutdown -r now перегрузить систему

Quik Note: Команды для получения системной информации

  • dmidecode -q показать аппаратные системные компоненты - (SMBIOS / DMI)
  • hdparm -i /dev/hda вывести характеристики жесткого диска
  • hdparm -tT /dev/sda протестировать производительность чтения данных с жесткого диска
  • cat /proc/cpuinfo отобразить информацию о процессоре
  • cat /proc/interrupts показать прерывания
  • cat /proc/meminfo проверить использование памяти
  • cat /proc/swaps показать файл(ы) подкачки
  • cat /proc/version вывести версию ядра
  • cat /proc/net/dev показать сетевые интерфейсы и статистику по ним
  • cat /proc/mounts отобразить смонтированные файловые системы
  • lspci -tv показать в виде дерева PCI устройства
  • lsusb -tv показать в виде дерева USB устройства
  • date вывести системную дату
  • cal 2007 вывести таблицу-календарь 2007-го года
  • date 041217002007.00 установить системные дату и время ММДДЧЧммГГГГ.СС
  • (МесяцДеньЧасМинутыГод.Секунды)
  • clock -w сохранить системное время в BIOS

Quik Note: DEB пакеты (Debian, Ubuntu)

  • dpkg -i package.deb установить / обновить пакет
  • dpkg -r package_name удалить пакет из системы
  • dpkg -l показать все пакеты, установленные в систему
  • dpkg -l | grep httpd среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd"
  • dpkg -s package_name отобразить инфрмацию о конкретном пакете
  • dpkg -L package_name вывести список файлов, входящих в пакет, установленный в систему
  • dpkg --contents package.deb отобразить список файлов, входящих в пакет, который ешё не установлен в систему
  • dpkg -S /bin/ping найти пакет, в который входит указанный файл.
  • APT - средство управление пакетами (Debian, Ubuntu и тому подобное)
  • apt-get install package_name установить / обновить пакет
  • apt-cdrom install package_name установить / обновить пакет с cdrom'а
  • apt-get update получить обновлённые списки пакетов
  • apt-get upgrade обновить пакеты, установленные в систему
  • apt-get remove package_name удалить пакет, установленный в систему с сохранением файлов конфигурации
  • apt-get purge package_name удалить пакет, установленный в систему с удалением файлов конфигурации
  • apt-get check проверить целостность зависимостей
  • apt-get clean удалить загруженные архивные файлы пакетов
  • apt-get autoclean удалить старые загруженные архивные файлы пакетов

Sunday, April 13, 2008

Ядерный подход к безопасности Wi-Fi сетей


Введение.
В настоящее время тема безопасности в Wi-Fi сетях чрезвычайно популярна. В сети существует огромное количество статей посвященных тому как легко ломается WEP и тому как быть с WPA. Но практически нет статей посвященных тому как же все таки защитится от этого. Мы в этой статье постараемся поделится нашими исследованиями в этой области.
Замечание: тех кто не видит ничего страшного в том что ваш сосед скачает за ваш счет пару клипов, просим вспомнить о таких вещах как снифинг, рассылка спама от вашего имени, компрометация точки доступа, создание фиктивных DNS серверов и прочих веселостях.
Страшный сон вардрайвера

Представьте себе что вы начитались всех этих статей о безопасности. И вот вы выходите в поле вооруженные Kismet'ом, Aircrack'ом, Ettercap'ом и прочими могучими вещами. Вы находите свою жертву, сеть вашего соседа Васи Пупкина. Все идет по сценарию, вы получаете ключ и подключаетесь к сети. Пинг есть! Все отлично и замечательно... Только вот работать с этой сетью вы не можете, вообще никак... вы не можете выйти в интернет, хотя traceroute показывает весь путь. Вы не можете залезть на шару к Васе Пупкину хотя пинг есть, вы не можете перехватить ни одного пароля.
Вот и любой нормальный человек на вашем месте подумает "Что за фигня?.."
Что это была за фигня.
Реализовать весь этот кошмар не только возможно но и достаточно просто. Необходимо на все машины в сети поставить фильтр-драйвер aka stelth patch, который будет перехватывать пакеты на сетевом уровне, брать полезную нагрузку aka data этого пакета и преобразовывать ее по заданному вами алгоритму. Почему именно сетевой уровень? Дело в том что на этом уровне контрольная сумма считается только для заголовка, позволяя нам преобразовывать данные на свой вкус. (Конечно контрольная сумма считается через CRC32 который вполне возможно сломать. но мы думаем что это стает темой следующей статьи. Пока нам хватит и этого)
Реализация.
Здесь описывается создание специального модуля ядра для Unix - like ОС.
Почему для линукс? Ну во - первых потому что ядро основано на модульном принципе и с этими модулями довольно просто обращаться; во - вторых это открытые исходные коды которые помогли разобраться с взаимодействием системных сокетов с ядром; в третьих в никсах подобные действия не называются мерзким хаком и не преследуются уголовно.
Модуль ядра представляет собой специальным образом откомпилированную программу. На нее налагаются определенные ограничения подробнее о которых можно найти в сети.
То что у нас получилось можно скачать здесь. Алгоритм кодирования самый простой, но его естественно можно заменить. Для того чтобы настроить и запустить модуль необходимо в /etc/ip_hack.conf прописать имя своего беспроводного устйства и запустить /etc/init.d/ip_hack. Вот и все настройки ;)
В качестве примечания наверно стоит сказать что модуль должен находится как на стороне рабочей станции так и на точке доступа. Практически на всех точках доступа в качастве операционной системы стоит *nix. И естественно так как в каждой системе рано или поздно найдется баг в каждой точке есть возможность смены системы (обычно ето делается перепрошивкой). Зная как перепрошить свою точку доступа и имея на неё прошивку вы можете самостоятельно внедрить в прошивку свой модуль и залить её на девайс.

P.S.
О том как перепрошить точку доступа постараемся рассказать в одной из будущих сатей.

Thursday, April 3, 2008

Про что этот блог

Это блог нашей небольшой дружной команды =) Основной темой наших исследований является безопасность. В частности безопасность линукс лайк систем. Но и остальные темы нам не чужды. Поэтому:
Этот блог посвящен программированию, операционным системам, сетям и вообще жизни вселенной и всему такому ;)
В нем публикуется что-то интересное, полезное или просто показавшееся нам интересным и полезным. За достоверность сведений авторы несут точно такую же ответственность как и ваша соседка посоветовавшая отчистить жевачку бензином.
Если кто-то найдет для себя здесь что-то полезное будем рады, если нет то нет ;)