• Суды как инструмент социального хакинга или немного о достоверности сведений в базах WHOIS

      Пренеприятнейшая история случилась с одним моим знакомым. Возможно Вы уже читали о нем ранее, но это совсем другая история.


      Кадр из фильма «Законопослушный гражданин» (англ. Law Abiding Citizen) имеет иллюстративный характер.

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

      Есть у него одно небольшое ООО, которое, к слову, никогда не оказывало услуг хостинга, не оказывает сейчас и не планирует их оказывать в дальнейшем.

      И повадились ему досаждать различными способами. Пережив брутфорсы серверов, взломы сайтов, DDoS'ы всех уровней, телефонные шторма, абузы на хостинги и письма из РКН, Михаил закалился и звонок курьера не заставил его сильно нервничать:
      — Михаил Юрьевич, у меня корреспонденция для Вас. Подскажите, когда будете на месте?
      — Стою в пробке, минут через тридцать. Оставьте коллегам в соседнем офисе.
      — Извините, не могу — письмо из суда.
      — Ok, тогда ждите.

      Основано на реальных событиях.
      Далее, по просьбе Михаила, все физические и юридические лица, имена сайтов и наименования фильмов вымышлены. Любое сходство является случайным.

      Читать дальше →
    • В поисках LD_PRELOAD

        Эта заметка была написана в 2014-м году, но я как раз попал под репрессии на хабре и она не увидела свет. За время бана я про неё забыл, а сейчас нашёл в черновиках. Думал было удалить, но авось кому пригодится.



        В общем, небольшое пятничное админское чтиво на тему поиска «включенного» LD_PRELOAD.
        Читать дальше →
        • +67
        • 8.1k
        • 9
      • Когда 'a' не равно 'а'. По следам одного взлома

          Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.

          Надо сказать, что приятель мой вполне себе UNIX-пользователь: может сам поставить систему, установить mysql, php и сделать простейшие настройки nginx.
          И есть у него десяток-полтора сайтов посвященных строительным инструментам.

          Один из таких сайтов, посвященный бензопилам, плотненько сидит в ТОПe поисковиков. Сайт этот — некоммерческий обзорник, но кому-то поперек горла и повадились его атаковать. То DDoS, то брутфорс, то комменты напишут непотребные и шлют абузы на хостинг и в РКН.
          Неожиданно всё стихло и это затишье оказалось не к добру, а сайт начал постепенно покидать верхние строчки выдачи.

          image

          То была присказка, дальше сама админская байка.

          Время близилось ко сну когда раздался звонок телефона: «Сань, ты не глянешь мой сервер? Мне кажется меня хакнули, доказать не могу, но ощущение не покидает уже третью неделю. Может мне просто пора лечиться от паранойи?»
          Читать дальше →
        • Чем проще задача, тем чаще я ошибаюсь

            image

            Эта тривиальная задача возникла в один из пятничных дней и должна была занять 2-3 минуты времени. В общем, как всегда.

            Коллега попросил поправить скрипт у него на сервере. Сделал, сдал ему и обронил ненароком: «Время спешит на 5 минут». Сервер его, пусть сам и разбирается с синхронизацией. Полчаса, час прошел, а он всё пыхтит и тихо матерится.

            «Бестолочь! — подумал я, переключаясь в консоль сервера — ну ладно оторвусь ещё на пару минут.»

            Смотрим, ntp, rdate, sdwdate не установлены, timesyncd отключен и не запущен.

            # timedatectl
                  Local time: Sun 2019-08-25 20:44:39 +03
              Universal time: Sun 2019-08-25 17:44:39 UTC
                    RTC time: Sun 2019-08-25 17:39:52
                   Time zone: Europe/Minsk (+03, +0300)
                 NTP enabled: no
            NTP synchronized: no
             RTC in local TZ: no
                  DST active: n/a
            

            Здесь сразу отмечу, что аппаратное время верное: по нему будет легче ориентироваться дальше.

            Отсюда и началась череда ошибок.
            Читать дальше →
          • Почему (сегодня) return 444 не всегда полезен

              В web-сервере Nginx есть замечательный код ответа 444, который «закрывает» соединение без отправки данных. Данный функционал весьма полезен при фильтрации паразитного трафика — если мы уверены, что клиент по каким-то критериям не является валидным, то нет необходимости его уведомлять, например, 403-м ответом. Эффективнее просто прекратить передачу данных, что, зачастую, позволяет существенно снизить нагрузку на сервер.

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

              И, в общем-то, на протяжении многих лет эти советы можно было использовать почти не глядя, но… современные браузеры не стоят на месте и периодически преподносят нам новые сюрпризы.
              Читать дальше →
            • Сопроцессы: -что, -как, -зачем?

                Многие пользователи Bash знают о существании со-процессов, появившихся в 4-й версии Bash'a. Несколько меньшее количество знает о том, что сопроцессы в Bash не какая-то новая фича, а древний функционал KornShell'a появившийся ещё в реализации ksh88 в 1988 году. Ещё меньшее количество пользователей shell'ов умеющих сопроцессить знают синтаксис и помнят как это делать. Вероятно, я отношусь к четвёртой группе — знающих о сопроцессах, периодически умеющих ими пользоваться но так и не понимающих «зачем?». Я говорю «периодически», так как иногда я освежаю в голове их синтаксис, но к тому моменту, когда мне кажется что «вот тот случай когда можно применить co-proc» я уже напрочь забываю о том как это делать.

                Этой заметкой я хочу свести воедино синтаксисы для разных шеллов чтобы на случай, если таки придумаю зачем они мне нужны, я если и не вспомню как это делать, то по крайней мере, буду знать где это записано.

                В заголовке статьи у нас 3 вопроса. Пойдём по порядку.

                Что?


                Что же такое co-process? Со-процессинг — это одновременное выполнение двух процедур, одна из которых считывает вывод другой. Для его реализации необходимо предварительно запустить фоновый процесс выполняющий функционал канала. При запуске фонового процесса его stdin и stdout присваиваются каналам связанными с пользовательскими процессами. Соответственно, один канал для записи, второй для чтения. Пояснять это проще на примерах, поэтому сразу перейдём ко второму вопросу.
                Читать дальше →
              • Дёргаем цепочку сертификатов

                  Вчера, видимо, был шабаш https и клиенты стали массово слать сертификаты. Разумеется ни корневых ни промежуточных не прилагалось и просьба их выслать вызывала такое же недоумение как встречный поток у блондинки на дороге с односторонним движением.

                  На 4-м сертификате дёргать их вручную стало лень (а я ленив по натуре), поэтому набросал «самокат» выцепляющий издателя и формирующий chain-файл для скармливания nginx'у.
                  Наверняка он не идеален и проверен лишь на полуторадесятках сертификатов, но чем богаты.

                  Об устройстве x.509 много сказано (в том числе на хабре), поэтому повторяться не буду.

                  Ниже просто пошаговая инструкция получения цепочки вперемешку с небольшой выжимкой из теории и не более того.
                  Читать дальше →
                  • +14
                  • 17.8k
                  • 3
                • Bash Co-Processes

                  • Translation
                  Одной из новых функций в Bash 4.0 является coproc. Оператор coproc позволяет создавать со-процесс, который связан с командной оболочкой с помощью двух каналов: один для отправки данных в со-процесс, второй для получения из со-процесса.

                  Впервые я нашёл применение этому пытаясь писать лог используя перенаправление exec. Цель состояла в том, чтобы опционально разрешить запись вывода скрипта в лог-файл после запуска сценария (например, вследствие опции --log командной строки).

                  Основная проблема с логированием вывода после того как скрипт стартовал связана с тем, что его вывод уже мог быть перенаправлен (в файл или канал). Если мы перенаправим уже перенаправленный вывод, то не сможем выполнить команду так, как это было задумано пользователем.
                  Читать дальше →
                  • +15
                  • 8.2k
                  • 3
                • Немного о сокетах, redis и битых яйцах

                    Работать в пятницу после обеда первого апреля не хочется — вдруг ещё техника выкинет какую-нибудь шутку. Потому решил о чем-либо написать.
                    Не так давно на просторах хабра в одной статье огульно охаяли сразу Unix-сокеты, mysql, php и redis. Говорить обо всём в одной статье не будем, остановимся на сокетах и немного на redis.
                    Итак вопрос: что быстрее Unix- или TCP-сокеты?
                    Вопрос, который не стоит и выеденного яйца, однако, постоянно муссируемый и писать не стал бы если б не опрос в той самой статье, согласно которому едва-ли не половина респондентов считает, что лучше/надёжнее/стабильнее использовать TCP-сокеты.
                    Тем, кто и так выбирает AF_UNIX, можно дальше не читать.
                    Читать дальше →
                  • Амнезия FreeBSD

                      Я никогда не понимал как работает распределение памяти во FreeBSD. Из всего многообразия документации полезное помнилось, лишь

                      An urban myth has circulated for years that Linux did a better job avoiding swapouts than FreeBSD, but this in fact is not true. What was actually occurring was that FreeBSD was proactively paging out unused pages in order to make room for more disk cache while Linux was keeping unused pages in core and leaving less memory available for cache and process pages.


                      Ну лучше чем Linux, да и пусть. Я не против. Но хуже самого непонимая процесса выделения памяти меня убивала Inactive память. Что это такое и можно ли «это» безболезненно использовать? Считать ли эту память доступной для использования приложением?

                      Под cut'ом больше вопросов чем ответов.
                      Читать дальше →
                    • А был ли who на сервере?

                        Тяпница… тринадцатое… всё важное решили оставить на понедельник, а потому сделаю какую-нибудь гадость…
                        В связи с появивишимся на хабре пересказом статьи решил немного отбалансировать данное руководство. Скрыть своё посещение, конечно, не совсем тривиально, но особых сложностей это не составляет.
                        Итак, задача:
                        Войти на сервер, выполнить некие действия и «подмести» за собой.

                        Здесь и далее считаем, что никаких дополнительных инструментов слежения( за исключением «по умолчанию») в системе не используется и мы знаем пароль root'a.

                        С чем работаем:

                        # uname -ori
                        FreeBSD 10.0-RELEASE GENERIC
                        

                        # `echo $SHELL` --version
                        tcsh 6.18.01 (Astron)
                        

                        Описываемое ниже несколько диссонирует с упоминаемой выше статьей, т.к. оная в первую очередь ориентирована на Linux-пользователей, но общие принципы теже и после перехода во FreeBSD(c 9.0) на хранение данных в utmpx родство стало ближе.

                        Поехали…
                        Читать дальше →
                      • single-mode во FreeBSD с поддержкой сети

                          Это совсем маленькая заметка о том, что как нет ничего более постоянного чем временное, так и самая тривиальная(на первый взгляд) задача занимает больше всего времени.
                          В пятницу утром знакомый обратился с вопросом «Как пересобрать мир в single-mode на удалённом сервере без KVM?»
                          «Прописать в /etc/rc скрипт выполняющий /etc/netstart && service sshd start в части исполняемой в single-mode, а дальше всё как обычно», — ничтоже сумняшеся ответил я.
                          Но спустя часа два вопрос повторился и оказалось, что всё не так тривиально.
                          Уж не знаю было ли это просто моим заблуждением или всё-таки в ранних версиях FreeBSD /etc/rc частично выполнялся в single-mode(справедливости ради никогда не приходилось это проверять), но в 10-ке он действительно не работает.
                          Итак, задача:
                          # uname -opr
                          FreeBSD 10.1-STABLE amd64
                          Необходимо перейти из multi-mode в single-mode и получить доступ по ssh.
                          Читать дальше →
                        • SYN-флудим со спуффингом на 14 mpps или нагрузочная вилка V 2.0

                            Что-то меня пробило на написание заметок последнее время, поэтому пока энтузиазм не спал раздаю долги.
                            Год назад я пришёл на хабр со статьёй "TCP(syn-flood)-netmap-generator производительностью 1,5 mpps", после которой многие писали и даже звонили с просьбой описать создание такой же «вилки» со спуффингом на максимуме возможностей 10GB сети. Я всем обещал, а руки всё не доходили.
                            Кто-то скажет, что это руководство для хакеров, но ведь свинья грязи найдёт, а те кому нужен этот инструмент в благонадёжных целях могу остаться ни с чем.

                            image
                            Читать дальше →
                          • Что такое grep и с чем его едят

                              Эта заметка навеяна мелькавшими последнее время на хабре постами двух тематик — «интересные команды unix» и «как я подбирал программиста». И описываемые там команды, конечно, местами интересные, но редко практически полезные, а выясняется, что реально полезным инструментарием мы пользоваться и не умеем.
                              Небольшое лирическое отступление:
                              Года три назад меня попросили провести собеседование с претендентами на должность unix-сисадмина. На двух крупнейших на тот момент фриланс-биржах на вакансию откликнулись восемь претендентов, двое из которых входили в ТОП-5 рейтинга этих бирж. Я никогда не требую от админов знания наизусть конфигов и считаю, что нужный софт всегда освоится, если есть желание читать, логика в действиях и умение правильно пользоваться инструментарием системы. Посему для начала претендентам были даны две задачки, примерно такого плана:
                              — поместить задание в крон, которое будет выполняться в каждый чётный час и в 3 часа;
                              — распечатать из файла /var/run/dmesg.boot информацию о процессоре.

                              К моему удивлению никто из претендентов с обоими вопросами не справился. Двое, в принципе, не знали о существовании grep.

                              image

                              Поэтому… Лето… Пятница… Перед шашлыками немного поговорим о grep.
                              Читать дальше →
                            • Защищаем роутер от пользователя с помощью dd-wrt

                                Провайдер у которого я отбываю рабочую повинность выдаёт абонентам маршрутизаторы в безвозмездное пользование на период заключения договора. При выдаче роутера механики прошивают его, внося логин, пароль, ip и настраивая wifi. И всё бы ничего, но попадаются особо умные пользователи, которые любят понастраивать девайс, да и на маршрутизаторах есть кнопка сброса к заводским настройкам, после манипуляций с которой либо абонент ехал в офис, либо механик выезжал к абоненту заново настраивать устройство. Чаша терпения полнилась и последней каплей стал TL-WR841N, которых провайдер закупил крупную партию.
                                Мало того что педалька сброса не утоплена (а наоборот расположена так, что может быть нажата перекрученным кабелем да и просто хламом в котором иногда оказываются абонентские устройства) так ещё производитель совместил WPS и RESET на одной кнопке, что мягко говоря чуднОе решение.
                                image
                                Был ещё один болезненный момент — с родной прошивкой TP-Link'a роутер не всегда восстанавливал соединение после обрыва связи.
                                Конечно, и наше решение имеет свои минусы, как-то невозможность смены паролей, но с этим мы готовы мириться.
                                Ну чтож… Начинаем «лечение».
                                Читать дальше →
                              • Socks-сервер Dante или как одна буква может «съесть» пару суток времени

                                  Каждый раз сталкиваясь с таким «рабочим моментом» я задумываюсь надо ли его решение давать миру или оно мелочно для других, но на этот раз решил-таки выложить. Эта статья больше из разряда заметки на манжетах и написана лишь из-за скудности информации о настройке Dante в нете и хроманием на обе ноги официальной документации.
                                  В пятницу утром заказчик обратился с просьбой поднять socks-сервер на ~100 пользователей, с авторизацией по логину/паролю, привязкой IP и отправкой запросов с того же IP к которому конектится пользователь. При этом заказчик поинтересовался сроком выполнения работ и, хоть я не люблю делать прогнозы по времени установки/настройки, заверил его, что часа через 3-4 альфа-версия будет готова. Ну правда — погуглив выбрать подходящий socks-сервер, установить, почитать маны, подправить под себя дефолтный конфиг… в 4 часа должен вложиться.
                                  ОС FreeBSD 9.2, но всё нижеописанное справедливо и для 10-ки.
                                  Читать дальше →
                                • «Дружим» redis с nginx

                                    Не секрет, что для защиты от HTTP-DDoS зачастую используют связку nginx в качестве фронтенда и некий другой web-сервер в качестве бакенда. При этом ввиду большой нагрузки возникает проблема хранения логов для дальнейшего их анализа. Можно хранить в текстовом файле, но, естественно, анализировать/ротировать его весьма неудобно. Можно гнать данные напрямую в, например, mysql через пайп, но выигрывая в удобстве анализа мы проигрываем в производительности, особенно это заметно при фрагментации. Золотой серединой, пожалуй, будет no-sql решение.
                                    Для себя я выбрал redis.
                                    Читать дальше →
                                  • TCP(syn-flood)-netmap-generator производительностью 1,5 mpps

                                    Дано:
                                    # pciconf -lv | grep -i device | grep -i network
                                        device     = I350 Gigabit Network Connection
                                    # dmesg | grep CPU:
                                        CPU: Intel(R) Core(TM)2 Duo CPU     E7300  @ 2.66GHz (2666.69-MHz K8-class CPU)
                                    # uname -orp
                                        FreeBSD 9.1-RELEASE amd64
                                    

                                    Задача:
                                    Необходимо на данном оборудовании и ОС создать нагрузочную вилку в виде tcp(syn)-генератора трафика производительностью не менее 500kpps.

                                    Решение:
                                    Читать дальше →