thebeetlebum 06.02.2012 19:45
Посты с тегом security
Alx 25.09.2010 17:41
Есть вопрос! — Безопасность в системе с несколькими ssh-пользователями.
Возникла необходимость ограничить пользователей в получении различной информации из системы (Gentoo!), а именно:1. запретить листинг /home (чтобы нельзя было сделать cd /home/user2 и посмотреть список файлов там)
2. выводить в top/htop процессы только текущего пользователя (чужие никогда не показывать)
hate 25.09.2010 00:45
Есть вопрос! — SSH honeypot
Интересует сабж - примерно каждые пять часов кто-то пытается брутфорсить пароли рута. Основной sshd перенес на абсолютно левый порт, мне это совсем не проблемно. Очень хочется узнать, что же они будут делать, если получат доступ к компу.Просто запустить линукс в виртуалке и пробросить порты будет не очень хорошо - если там будет залита спамилка/червяк/прочие нехорошие вещи, то я окажусь в цепочке распространителей. Скрытность honeypot меня не особо (пока) волнует - пусть обнаруживают после входа.
Есть ли какие готовые и проверенные решения?
immortalday 01.08.2010 22:17
Security — Аудит действий пользователя в shell (bash/sh), sudo
Ведение логов шелла пользователя root через связку auditd и pamДля того чтобы включить ведение логов пользователя root через связку auditd и pam нужно добавить в файл /etc/pam.d/system-auth-ac строку.
immortalday 01.08.2010 19:39
Security — Парольная политика в Linux
Организация парольной политикиОрганизация парольной политики напрямую зависит от текущей принятой политики по обеспечению безопасности паролей в организации, системный администратор настраивая политику паролей должен следовать установленным стандартам.
m039 22.05.2010 16:24
Security — Если забыли пароль от клиента qutim
Пароль находится в файле на подобие этого - "~/.config/qutim/qutim.d33/ICQ.12345/accountsettings.ini" , но храниться он в каком-то не понятном значение на подобие этого - "password=@ByteArray(a\x11\x33\n\xf1m)".
Решение нашел в файле исходников qutim: oscarprotocol.cpp, шифрование выполняется обычным xor-ом, т.е. пароль почти хранится в открытом виде.
В данном исходнике, если поменять строчку str на зашифрованную строку, то получится искомы пароль:
m039 03.02.2010 15:20
Coding — Копаимся в системе веселья ради - Системеный вызов Welinux
Часть первая. Появление собственного системного вызова.
Сначала, что же такое системный вызов ядра? Хм.. ну скажем так, есть функции С библиотек, они достаточно абстрактны, например функция puts или printf являются оболочкой и используют системные вызов ядра(write), с соответствующими параметрами. А что делает системный вызов.. хм.. их много, и все они достаточно разношерстные, для ознакомления мне нравится вот эта pdf-ка .
Заметка: можете использовать такие команды как ltrace и strace для анализа и удостоверения, что у системного вызова есть номер.
Сам по себе системный вызов это функция, но немного по особому определенная. А так как задача заключается в изменении её, приведу листинг написанный на коленке, который поможет вспомнить синтаксис сишника:
refresh_memory.c:
Хм.. это.. а всё таки как написать системный вызов? И встроить его в ядро? Гугл ответил вот такой вот пдф-кой . , но в ней также есть информация как скомпилировать ядро под .. ubunty.
Заметка: Хочу посоветовать, что лучше все-таки это безобразие вытворять на виртуальной машине. Там все скомпилируйте. А если используете virtualbox, то советую настроить общие папки(share folders). Но с этими папками не всё гладко, компилировать ядро не получиться в этой папке, потому что оно не понимает что такое символические ссылки. Поэтому можно настроить либо nfs, если хотите что бы файлы компиляции находились на хостовой машине.
Итак, что бы добавить в само ядро новый системный вызов нужно: добавить в таблицу системных вызовов(о ней далее) указатель на новый системный вызов(банально - функцию) и определить где-то этот системный вызов(функцию). А потом все это слинковать. Исправлять файлы в includes не нужно. Хотя если делаем системный вызов Welinux, то не плохобы напомнить всем, что мы зарезервировали себе номер..
Таблица системных вызов, это массив в котором содержится указатели на функции. Открываем lxr и находим эту таблицу по названию sys_call_table
Ой, чуть не забыл, тут уже пошел ассемблер, а не сишник. Немного поясню, ".long <>" это равносильна сишному "long <>". Но сам не до конца всего знаю, поэтому далее интересуюсь, что значит макрос ENTRY , а вот оно:
Для тех, кто делает все в голове получим вот такую штуку в конце манипуляций. Т.е. в конце всех манипуляций будет приведено к виду:
1 2 3 4 5 6 7 |
Долго искал, что значит 0x90, вроде бы в глаза бросается, что это nop, но до конца не был уверен. Ответ нашел на сайте .
Итак, теперь немного воочию убедились, что есть такая таблица. Осталось добавить свой системный вызов и прилинковать его. Можете для начала поискать в lxr определение системных вызовов, вот например этот sys_getpid вызов не такой уж сложный. Но попробуйте его найти, не заглядывай в спойлер. Я чтот много времени потратил искамши :(
тут
Пишем системы вызов welinux. (Большей частью руководствуясь pdf-кой):
Для это создаем папку в корне исходников линукса.
Помещаем в неё исходники wl.c и Makefile.
wl.c:
1 2 3 4 5 |
Makefile:
1 |
Потом изменяем главный Makefile:
Строчку:
1 |
На:
1 |
Ох-хо-хох, забыл добавить в таблицу системный вызов. Добавляем в конец файла "arch/x86/kernel/syscall_table_32.S" строчку ".long sys_welinuxing". И главное запоминаем номер под котором он идет! У меня виртуалка 6.26, номер будет 327.
Заметка: есть соглашение по поводу названий, т.е. sys_* предшествует названию системного вызова, но практически можно оставить любое название, которое придет на ум.
Усё, компилируем и запускаем ядро. Первый этап пройден. :)
Часть вторая. Захватываем мир.
Теперь можем поиграться с новым системным вызовом.
Для начало узнаем как прошли дела с компиляцией:
1 |
Или:
1 |
Выдало "c0211db8 T sys_welinuxing", что означает, что адрес нашей функции в ядре 0хc0211db8.
Тестируем вот такой вот исходничек:
1 2 3 4 5 6 7 8 |
Ну вы уже должны знать, что должно произойти. Уфф.. на данный момент системный вызов должен работать.
Часть третья. Люто бешено минусуем
Теперь переходим к 3му этапу написанию модуля ядра.
Создаем где угодно папку и помещаем туда 2 файла:
1 2 3 4 5 6 7 8 |
Первый вариант w.c:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
После чего убедитесь в том, что система в состоянии скомпилоровать модули. Это я жестко опущу
А теперь вы уже может быть догадались, что у нашей таблицы(sys_call_table) есть свой адрес. Делается той же коммандой:
1 |
Вывод:
"c042a86c R sys_call_table"
Теперь изменяем наш модуль на вот такой вот:
w.c:
Ну как, тот же адрес вывела на экран, как если бы использовали функцию "grep welinux /proc/kallsyms"?
А теперь попробуем из самого ядра вызвать эту функцию с помощью, этого файла:
А теперь подменим её:
Теперь вставляя один модуль, мы управляли системным вызовом которым мы сделали.
Уфф.. закончил. На самом деле писать это кажется гораздо дольше чем делать, но думаю что кому-нибудь веселье доставить такой подход.
Из оставшихся вопросов:
Как отследить, то что произошло изменение ядра и старый системный вызов стал уже не тот.
Говорят, что есть динамическое создание системных вызовов.
Научить системный вызов генерировать прерывания, следовательно создать свой обработчик.
evgenyl 17.11.2009 14:04
Я рекомендую — Что такое /var/log/wtmp
Все логи доступны как обычный текстовой файл, а этот имеет бинарный формат и по этому многие даже не знают что это такое и зачем оно нужно?
|xed| 13.07.2009 14:50
Я рекомендую — Защищаем ssh
тут наткнулся на статейку http://www.opennet.ru/opennews/art.shtml?num=22511 , которая заставила задуматься о защите ssh.В интернете есть много советов как защитить ssh,но мне бы хотелось все советы объединить в одну статейку которая послужила бы неким комплексом по защите ssh.
25.05.2009 00:33
vrusinov — GNUnet: свободный и анонимный обмен файлами
Кросспост с моего сайтаОбщий обзор проекта.
Введение
GNUnet - это программный пакет для безопасного peer-to-peer соединения, не нуждающегося в серверах. Проект GNUnet возник в 2001 году и был вдохновлён целым рядом технических идей, призванных обеспечить безопасный файлообмен в пиринговых (P2P) сетях.
GNUnet является не просто файлообменной сетью. Основная цель проекта - создание надежной, открытой, равноправной и анонимной (т.е. недоступной цензуре и контролю) системы обмена информацией. Планируется предоставление множества интернет-услуг, а GNUnet стремится стать платформой для разработки децентрализованных сервисов следующего поколения.