Как всегда без имен и названий, и так как я дополнительно связан подписью о неразглашении, еще и с немного видоизменённой историей (и опуская некоторые подробности, на публикацию которых я не получил разрешения).
Ниже следует реальная история проникновения на компьютер сотрудника… ну скажем некоторого частного банка. События, о которых повествует ваш покорный слуга, происходили в некоторой европейской стране не так что бы давно, еще до DSGVO (GDPR, RGPD) но в процессе становления оного, в преддверии так сказать.
Собственно началось всё с аудита безопасности — ..., интервью, разглядывания под лупой всего и вся, поиском и проработкой потенциальных лазеек и узких мест на пролезть (как туда, так и оттуда), ..., и собственно разбора полётов. На котором заказчик получил в итоге неутешительный для него вывод — "троечка с натяжкой".
Опустим слова, которые пришлось выслушать от краснеющих на глазах IT-безопасников, но общий лирический посыл таков — я бросаюсь голословными обвинениями, а у них — всё на замке, а ключ у CSO в кармане под сердцем.
Попытки объяснить, что система безопасности выстроенная вокруг firewall+proxy+webwasher like content-filter & antivirus, без какой-либо худо-бедно настроенной гибридной IDS (HIDS+APIDS), хонепотов и т.д. и т.п., во первых по определению не является безопасной, во вторых я же как бы показал уже несколько мест, где оно как минимум не комильфо. Попытки вернуться к конструктивному диалогу (собственно обратно к разбору) разбивались о трехэтажную стену обиды, выстроенную всем отделом.
Свернув совещание и отпустив сотрудников, CSO вкупе с двумя важными начальниками попытался всё-таки честно выяснить у меня где собака порылась и понять как дальше жить как собственно и что конкретно, по моему скромному мнению, нужно делать.
Т.к. проблеска понимания в дальнейшем тоже не наблюдалось, с воодушевлением встретил предложение показать на практике. После объяснения что де прямо сейчас ну никак не получится, улаживания формальностей (подписывания еще нескольких бумаг и т.п.) я получил добро на "взлом".
Замечание о том, что работать "вслепую" не очень люблю (муторно, долго и дорого, да и пентестинг, то дело такое — на удачу) и просьба предоставить поэтому некоторую дополнительную информацию (например некоторые личные данные отдельных сотрудников, как то разрабов и безопасников), встречного понимания не встретила тоже.
Ты хакер или нет?! (вообще-то нет, я разраб, а то — больше хобби).
Я не буду долго останавливаться на дальнейшей дискуссии — убедил как всегда фактор деньги и время (т.е. собственно те же деньги).
Т.е. в результате имеем какое-никакое знание о структуре защиты компании (полученное в результате предварительного аудита), а также ФИО и краткую биографию 4-х администраторов и 3-х разработчиков.
Почему собственно админы и разрабы, ведь можно же было спросить за "девочек-бухгалтеров", отправить им какого-нибудь "котика" с приложенным каким-нибудь гораздо менее безопасным зверьком в придачу (или провернуть что-нибудь подобное из соц-инженерной области). Но…
Однако очень многие компании как правило не очень любят когда им на презентации PoC начнут за такое рассказывать, т.е. "система взлома" базирующаяся на происках из области соц-инженерии как минимум не приветствуется, как бы гениально она не была бы построена.
Возвращаясь же к технарям, они во первых не менее "социальны" (что совсем не значит, что они запустят какого-либо "котика", но пока важен сам факт), во вторых как правило обладают более "развитым" в функциональном плане компьютером (чего там только не встретишь). И что более интересно, кроме того нередко имеют какие-нибудь "привилегии" в отличии от той же девочки бухгалтера, т.е. могут либо быть менее ущемлены в правах в плане безопасности и системных ограничений (типа policies и ко — надо же например как-то запускать только что скомпилированный exe-шник) и/или могут сами пролазить через "стену", построенную безопасниками (например пробросив туннель через прокси) и т.д. и т.п.
Опять же пролезть сквозь защиту, используя при этом комп программиста или админа, звучит уже совершенно по другому, чем например "заставив" запустить троян бухгалтера.
Т.е. исходные получены, задачи озвучены — поехали...
Первым делом сбор информации о "клиентах" — кто, что, где, когда.
Тут не буду сильно отвлекаться, статья не совсем об этом, поэтому просто скажу — остановился на довольно социальном пареньке, с фасебуками и ко, в том числе собственным youtube-каналом (ютубой, Вася!), несколькими опенсорсными проектами (как в группе, так и собственными) и просто гигантской contribution activity (спрашивается а он вообще на основном месте работает).
Выяснить ху-из-ху на сегодняшний день вообще как правило не проблема (где-то попользовал настоящее имя в месте с ником, где-то светанул IP адресом прокси с фирмы и картинка сложилась), да никто особо и не скрывается.
Затормозить же на нем меня заставило в том числе и моё природное чутьё тот факт, что в одной из коммьюнити наш герой занимался более-менее активной поддержкой в чате, причём используя IRC-клиента, который в user-info предоставлял помимо IP, откуда ноги растут, еще и название и версию себя любимого, ну и оное славилось багами/дырами и по умолчанию было обёрнуто плагинами почём зря.
Ну и как водится, как-то вечером, домашние уснули, по ящику одна муть, наши опять проигрывают:) я в том самом чате обнаружил знакомый ник, как активного пользователя с коннектом длиннее 12 часов (судя по логу с промежуточными отключениями/пере-подключениями, ибо корпоративный прокси такая штука, но уже более полдня с момента первого соединения), с нужного мне IP адреса т.е. с "логином" вида max.mustermann@proxyext.our-company.example.com
.
Т. е. либо у нашего клиента день — 24 часа, либо что более вероятно (ибо с момента его последнего сообщения прошло уже 2 часа) он просто не выключил рабочий компьютер и оставил IRC-клиент активным.
А может он и усыпил компьютер, но (тут снова ошибка безопасников или админов) бывает что последний просыпается сам, например чтобы накатить обновления для винды (и после 4-х часовой паузы перезагрузиться) или просто тупо словив wake-on-lan сигнал...
Как бы то ни было, у меня было некоторое количество времени, чтобы потрепать компьютер, вернее IRC-клиент нашей "жертвы".
Не найдя ни одной известной дыры в этой конкретной (кстати актуальной на тот момент) версии IRC-клиента, вооружившись идой, ollydbg и т.п. и поглядывая в исходники (тихий ужас, Вася!) начал искать какую-нибудь уязвимость, дающую возможность как минимум исполнить там чего либо, с прицелом на как максимум удаленно контролировать IRC-клиента (а мы помним про плагины).
И оно нашлось таки, даже относительно быстро!
Перехватить контроль позволило наличии небезопасного вызова sprintf
на буфер из стека с %s
внутри от плохо-отфильтрованного foreign-input (в совокупности с инжектом по encoding), позволяющее записать в стек в нужное место "загрузчик кода эксплойта" (спасибо разрабам клиента за код, Microsoft за lowland stack и удачному стечению обстоятельств).
Хотя помучится всё-таки пришлось — т.к. имеем DEP, исполнять напрямую из стека нельзя, нужно записать в стек копию "программного кода" для исполнения, найти memcpy
вызов с ret
в конце, чтобы скопировать в нужное место (переписать мало используемый класс), перенаправить выход из нескольких процедур в нужное место, перезаписать несколько значений VTABLE, чтобы по вызову следующего виртуального метода сгенерировать событие, вызывающее в результате некоторый питоний код в качестве плагина (да и поменять этот питон-код на свой, как загрузчик из сломанных сообщений, чтобы уже собрать готовый эксплойт-тулкит).
Ах да, еще нужно было собрать у себя плагин (снова спасибо разрабам клиента за такой щедрый функционал), в качестве прокси, меняющее сообщения налету (добавляющее обёртку для инициации инъекции, ломающее ему encoding, при этом вставляя неполные суррогаты в нужном месте, и т.д.), закодировать инициальный загрузчик сообщения-инъекции, и т.п.
Кроме того, пришлось собрать небольшой питоний скрипт в виде нового плагина-клиента для целевой системы в качестве эмулятора консоли (принимающий мои сообщения в его stdin, и отправляющих stdout+stderr приватным сообщением обратно на мой ник).
Собрав это всё на коленке, запустил у себя тот IRC-клиент, чтобы попробовать себя в качестве жертвы, т.е. увидеть как оно будет в полном, готовом виде.
И отправив через свой плагин из другой сессии из второй запущенной версии приложения, несколько приватных сообщений-инъекций, обрадовано увидел ответом привычное питонье приветствие >>>
(который я в эмуляторе воткнул, для наглядности — питон же).
Довольный как слон (отметив что атакуемое приложение не упало), увидел что творится в его окне вывода сообщений — оно пестрело различными non-ascii символами, самым заметным из которых был ?
с порядковым номером 90h (что как минимум не комильфо, а то и выдаёт с головой попытку взлома), подумал что нужно таки переделать загрузчик, чтобы маскировать следующие сообщения (вдруг он всё-таки еще работает и заметит).
Заглянул в код, а там на выдаче ждут NTS-строчку, решил сильно не заморачиваться и тупо переписать первый байт сообщения после загрузки нулём (с надеждой что выдача на экран сообщения будет по событию немного позже).
Повторив весь процесс, и дождавшись желанного >>>
снова взглянул в другое окно и не обнаружив там ничего лишнего в чате (я всё-таки гений), решил продолжить тест.
Следом улетело сообщение from glob import glob as ls; ls('*')
и я радостно увидел ответом список из папок и файлов, содержащихся в папке приложения.
Правда я увидел это же сообщение в окне атакующего клиента как отправленное на мой ник. Пришлось также и тут положить 0-байт (NTS) в начало строчки после отправки его мне.
Закончив тем самым с подготовительной фазой, отметил что наш подопытный товарищ всё еще в чате (без сообщений, Вася!), приготовил эксплойт уже для нашего кандидата.
Поехали...
Сообщения-инъекции ушли… И через несколько долгих секунд (видимо диск спал или прокси тупил) я вновь увидел приглашающий >>>
.
Как я прыгал по комнате, я тут всё же не буду рассказывать (то зрелище не для слабонервных, ибо в результате неконтролируемого процесса проявления радости, я таки засандалил мизинцем ноги о ножку стула).
Скривившись от боли и тут же подумав "а вдруг у него в окне отдачи чего-нибудь не то видно, вдруг я где-нибудь всё-таки напортачил и приложение в результате упадёт через время", вспомнил про возможный принудительный рестарт после update (если вдруг компьютер от того проснулся и уже накатили update), в холодном поту (поглядывая на опухающий мизинец и уняв дрожь в руках) я ускорился.
Первым делом проверка на всякий случай а там ли мы вообще.
>>>
import os; os.environ['userdomain']
и ответ:
'OUR-COMPANY'
>>>
Ну всё, руки развязаны… Поехали.
Проверив небольшим скриптом, что logonui залочен, уже чуть успокоившись, решил посмотреть что на компьютере вообще в наличии:
>>>
from glob import glob as ls; ls(r'C:\Program Files\*')
а в ответе, не веря своей удаче, среди много всего интересного увидел следующее:
[...,'C:\\Program Files\\TeamViewer',...]
>>>
Т.е. уже не нужно совершать лишние телодвижения — не надо ничего качать, компилить и искать папку куда можно записать это всё без нарушения каких-нибудь полиси.
А следом тем временем полетело:
>>>
import subprocess; subprocess.call([r'C:\Program Files\TeamViewer\TeamViewer.exe'])
ну и после вернувшегося ответа:
0
>>>
Подождав немного, чтобы TeamViewer успел пробраться через proxy и сервер выдал ему ID (с паролем), я запустил туда скрипт, ищущий окошко TeamViewer, снимающий с него screenshot и посылающий его обратно мне в виде base64-строчки, в которой, развернув её обратно в bitmap, я с удовлетворением нашел и ID и пароль для соединения.
...
Наутро мне уже звонил удивлённый CSO, получивший сначала письмо от меня (но почему-то пришедшее с внутреннего Exchange аккаунта своего сотрудника), а затем испуганный звонок от того же сотрудника со словами "Шеф, усё пропало — нас поломали", обнаружившего утром открытое окошко Word'а с крупным текстом внутри "Двойка вам по безопасности. Вас взломали!", дата, подпись.
После этого общение с безопасниками проходило уже более плодотворно, без брызг слюны, разрывания рубах и криков. Наученный горьким опытом (например как описано в этой статье), я как мог, пытался отложить разбор собственно взлома на попозже (ибо сначала хотелось получить денежный заказ на новый "концепт" безопасности), но после длительных уговоров, намёков на долгосрочное сотрудничество и т.п., а также обещаний с их стороны "не трогать" оплошавшего сотрудника (коллега всё-таки), пришлось им выложить почти все основные моменты.
Обговорённый баунти за взлом (как и стоимость предварительного аудита) я тогда получил полностью, но дальше контора повела себя… скажем, не совсем спортивно. Для продолжения концерта, они наняли видную и известную аудиторскую фирму, которая принципиально отказывалась работать с external в моем лице.
Ну и ладно, как говорят в Германии "Man sieht sich immer zweimal im Leben", что значит "Обязательно встретимся еще раз".
Комментарии (84)
oteuqpegop
10.07.2018 21:09перенаправить выход из нескольких процедур в нужное место
А ASLR отключена была для того процесса?sebres Автор
10.07.2018 21:29+1По моему — не было, да и ASLR редко для 32-битных клиентских (не серверных) приложений включается.
И даже если бы и да, вы правда думаете, что оно серьёзно задержит от такой уязвимости (тем более если много чего прямо там же на стеке и лежит)? Вот тут я например как-то «обходил» ASLR (для nginx), пусть не так, но смысл тот же.
Ну пользовал бы относительными (calculated от значения из стека) call-ами и jmp-ами, или тем же контролируемым переполнением буфера стека (со относительными смещениями)…
sebres Автор
10.07.2018 21:54Кстати ASLR обходится вообще кучей способов, например:
- inject on static loaded DLLs;
- inject on basically static loaded objects;
- partial overwriting of pointers;
- the information's leaks betrayed the addresses;
- etc.
Я как-то раз видел вообще "невероятную" схему (без претензии на повторить) — атакующий очень хитро заменил системный вызов по access violation (типа собственного catch-блока), и мог соответственно очень долго перебирать варианты адресов, без того чтобы приложение упало.
click0
10.07.2018 22:02после длительных уговоров, намёков на долгосрочное сотрудничество и т.п., а также обещаний с их стороны «не трогать» оплошавшего сотрудника (коллега всё-таки), пришлось им выложить почти все основные моменты.
У вас явно небольшой опыт общения с клиентами вообще.sebres Автор
10.07.2018 22:10У вас явно выраженая тенденция делать выводы по одному предложению… :)
click0
11.07.2018 01:35Я прочитал внимательно всю статью. Цитировать фразы по всему тексту считаю излишне.
sebres Автор
11.07.2018 02:07Не знаю, что конкретно вы еще имеете ввиду…
Ну и вы же многого не прочитали (просто потому, что я не написал).
А про опыт, собственно по основному роду деятельности опыт общения с клиентами напрямую уже вроде более 20 лет, и даже не вспомню с ходу, что я не смог "продавить", и "продано" всякого (от простых CR до многомесячных проектов) куча и маленькая тележка… как-то так.
Но ничуть не сомневаюсь, что ваш опыт — много богаче моего.
PaulAtreides
10.07.2018 22:10+2Да, но нет. Ну или вы не до конца рассказываете.
То есть, найти зиродэй это, конечно, крайне похвально и описано круто. Но в целом, к мерам безопасности, принимаемым вышеуказанной компанией, отношения не имеет. Что дальше-то было? Доменного админа мимикацем получили? Файлик с паролями в плэйн-тексте на компе нашли? Попали под рутом на файлохранилище, ввиду наличия на компе незапароленного сертификата?
Видите ли, в чём дело. Единственный способ любой компании защититься от косяка с тем, что в их софте ВНЕЗАПНО окажется зиродэй (он в любом софте есть. Например, прямо сейчас — в вашем браузере, двойка вам) — это обеспечить, как говорили в вузе, многорубежность и многозональность защиты. А ваша, как пентестера — продемонстрировать, что грош цена этим многорубежности и многозональности.
А так — понятное дело — они плечами пожали и пошли наняли кого-то другого.sebres Автор
10.07.2018 22:32Что дальше-то было? Доменного админа мимикацем получили? Файлик с паролями в плэйн-тексте на компе нашли? Попали под рутом на файлохранилище, ввиду наличия на компе незапароленного сертификата?
Вы серьезно? Залесть в комп сотрудника (скажем банка) и притом разработчика программ для него… — это по вашему мнению мало? Вы не поняли:
а) то было PoC;
б) я могу себе очень много нафантазировать, что я мог бы там теоретически натворить как black hat, начиная от стянуть банк данных (со сливом тех же клиентских данных) и заканчивая незаметной "пропиской" в программе разрабатываемой dev-ом, чтобы например незаметно погасить чей-нибудь кредит.
Но, тссс… я вам этого не говорил
Единственный способ любой компании защититься от косяка… — это обеспечить, как говорили в вузе, многорубежность и многозональность защиты
Я открою вам тайну — это далеко не единственный способ. Кстати, вы всему верите, что вам говорили (и думаете что правильно поняли, что вам говорили) в ВУЗе...
А так — понятное дело — они плечами пожали и пошли наняли кого-то другого.
Ну вам вероятно действительно лучше знать. Только кто вам сказал, что кто-то другой в той ситуации для конторы лучше? Есть много "но", которые вы не знаете (например, просто потому что я вам не рассказал), почему они решили так, как решили. Что меня не сказать чтобы сильно радует, но я с пониманием к этому отношусь.
Единственная ошибка конторы в моём понимании — это невыяснение заказчиком момента с external до подписания контракта с исполнителем...PerlPower
11.07.2018 00:23+1Мне тоже кажется, что взлом через сотрудника возможен практически всегда, вне независимости от того насколько хорошо настроена система безопасности. Наверное имеется ввиду что от вас хотели аудита безопасности сети предприятия в плане более традиционных способов проникновения. Ну говоря простым языком от вас хотели проверить качество настройки фаервола и стойкость паролей, а не болевой порог при котором админ сам вам назовет пароль.
А так вы сработали блестяще, и взлом несомненно засчитан. Возможно вы просто не поняли друг друга с заказчиком — для него очевидно, что через человеческий фактор и зеродей взломать можно всегда. Этим же может быть объяснено и то что вас изначально восприняли в штыки — может у них и правда все там нормально настроено, а зеродей он и есть зеродей, полностью от него защититься можно только выдернув шнур.sebres Автор
11.07.2018 01:33от вас хотели аудита безопасности сети предприятия в плане более традиционных способов проникновения
Грош — цена такой концепции безопасности… Она слаба ровно настолько, насколько её слабейшее звено имеющее доступ к важным данным.
Кстати, вы не путаете случайно сисадминов и безопасников? Т.к. области как бы смежные, но и концепции и принципы подходов в корне отличаются. В вашем примере "компании", засланный казачок (например от конкурента) при определённом уровне доступа ставит компанию на грань разорения по истечению некоторого времени.
для него очевидно, что через человеческий фактор взломать можно всегда.
Вы всё-таки по видимому путаете, ибо это очевидно для любого безопасника, вопрос в том как долго это останется незаметным и как можно минимизировать такой риск или хотя бы сумму урона (не отобрав при этом у людей возможность собственно выполнять свои обязанности).
Еще раз, речь не про угон сотни или даже тысячи паролей от вконтактика… а про бизнес на многия лярды вечно-растущих.PerlPower
11.07.2018 04:30Я вообще полный ноль в безопасности, но речь не о том. Думаю, вы просто разошлись в оценке вероятности вектора атаки, приемлемого уровня риска, или в цене, или в чем-то еще.
PaulAtreides
11.07.2018 00:26Да, я считаю, что этого мало. Один мой знакомый много работал в банках и постфактум на рабочих компьютерах много чего находил. Особенно у разработчиков. Они какие-то особые любители словить себе троянца. Но далеко не всегда были условия для дальнейшего развития атаки.
Впрочем, если в вашей модели рабочий компьютер — это главный и основной рубеж защиты, я вежливо сливаюсь из спора. Прошу прощения, что влез. :)sebres Автор
11.07.2018 01:59Если в вашей модели безопасности получить "доменного админа" (для чего?, ибо админские права в банках по нормальному очень и очень разграничены, вплоть до принципа четырех глаз и т.п. красоты) или слить "файлик с паролями" (кому они нужны за пределами внутренней сети того же банка?), то вы тогда и правда не в теме и лучше закрыть дискуссию. Возможно вы тоже путаете сисадмина с безопасником (а данные того же банка с паролями от жжшки и вконтактика).
Возвращаясь к теме рабочий комп разраба — вы (или ваш знакомый) видимо плохо представляют, что они вообще делают (или правильней что они могут делать) в компаниях типа тех же банков.
Если тех-процесс требует от разработчика во время собственно разработки иметь полный доступ к например счетам и данным клиентов, я вас уверяю он их получит (хотя бы как копию банки, и просто показательно редко эти данные будут анонимизированы, потому что это не всегда возможно или желательно).
Если разработчик делает дата-мининг, то у него (или как минимум у софта, который он юзает и/или делает) по определению есть полный доступ ко всей той информации (хотя бы опять и как к резервной копии).
Про то, что программу, который он разрабатывают когда-нибудь выльют в продакшн, вам уже говорилось выше (и хорошо если ее до этого не только оттестируют на баги, но и хотя бы проверят на наличие каких-нибудь закладок).
А теперь оцените риски рубежей защиты, ну а я тоже пожалуй пока вежливо "сольюсь".
sshmakov
11.07.2018 08:36Обезличивание базы всегда возможно и желательно, но большинству лень этим заниматься. Всегда можно найти "объективную" причину этого не делать.
sebres Автор
11.07.2018 13:27В теории — да, на практике же
забыли про овраги. Например желательно разрабатывать приложение на полноразмерной базе (чтобы не получить на продакшн сюрпризов в виде тормозов и т.п.).
И вот попробуйте обезличить в полутора-терабайтной банке (с тысячами и тысячами таблиц, с трех-этажными связями и триллионами транзакций) например номер клиента (являющийся приватным на самом деле и по совместительству primary и forign key, а то и logical key в двух десятках гигантских таблиц)… Даже ФИО и то бывает очень проблематично обезличивать полностью.
Бывает еще например полнотекстовое индексирование сверху и прочие чисто логические связи, перепись которых сравнима по затратам с пересозданием базы с нуля (многие годы). Как быть с зоопарком приложений (когда база пользуется десятком разных программ с общим центральным data inventory)…
А потом нужно еще как-то уговорить отдел контроля (ака internal audit), что вот этот скрипт нужен на продакшн для аннонимизированного экспорта, чтоб разраб мог дальше код писать.sshmakov
11.07.2018 19:12Да-да, есть миллион причин не делать обезличивание, и всего одна, чтобы сделать — безопасность.
Вот с последней фразой непонятно, зачем при экспорте? Я понимаю, что так надёжнее, конечно, но другие риски возникают, что скрипт не там и не то почистит.sebres Автор
11.07.2018 19:26Вот с последней фразой непонятно, зачем при экспорте?
Потому что если разграничивать по нормальному (иначе зачем обезличивание нужно), то есть как минимум два сегмента "прод" и "тест" (и к проду у разраба в этом случае доступа нет). Если речь о бэкапах, то и они лежат тогда тоже в сегменте "прод", ну или точно не в сегменте "тест".
но другие риски возникают, что скрипт не там и не то почистит.
read-only access ко всему, кроме папки export.
sshmakov
11.07.2018 19:47Речь о бэкапах, конечно. Экспортить по записям полтора терабайта никто не хочет, а бэкапы и так есть. Бэкап разворачивается в базу на тесте, в это время тестовая БД недоступна никому, и сразу после восстановления обезличивается. То же самое происходит со всеми базами в тестовом контуре. Когда все базы готовы, открывается доступ разработчикам.
sebres Автор
11.07.2018 20:01А кто это всё делает, не имеет доступа к сегменту «прод» (или к «тест» пока не обезличен)?
Чем он иначе тогда отличается от потенциального разраба, спрошу по другому, т.е. чем Вася лучше Пети, с точки зрения безопасника и revision dept?sshmakov
11.07.2018 20:10Он, а точнее «это», ибо скрипт, имеет доступ не к проду, а к бэкапу, который в отдельном сегменте «архив».
Чем он иначе тогда отличается от потенциального разраба
Тем, что разработчиков десятки и сотни, они могут быть внешними, новыми, а админ БД, чей скрипт — свой, проверенный и его всего три экземпляра в отделе.sebres Автор
11.07.2018 20:26Неправильный ответ, — админы нонче у банков как раз не свои, а "внешние" ибо дата-центры кругом, млин…
А доступа ко всему нередко даже у контент-манагера высшего эшелона нет.
Про "свой, проверенный" — улыбнуло. Разраб то часто не знает, чего там нужно обезличивать. А уж админ и подавно.
Возвращаясь же к теме обезличивания, вы не зацикливайтесь на базе… (не базой единой) — вот для примера напишите скрипт обезличивания файлика транзакции (месяца за два-три, штук так мильен в день, каждый подписан приватным ключем, которого у вас нет и не будет, и для которого нужно чтоб все ссыли aka references работали).
sshmakov
11.07.2018 21:26Я с пластиком почти не работаю, так что мне это не близко. Вряд ли два-три месяца идут одним файлом. Традиционно в таких случаях изготавливается пара тестовых ключей, им и переподписывается, они же и проверяются. Инфы, требуемой для обезличивания, в них немного — номер, точка и суть операции.
Но да, это ещё одна причина, чтобы не делать обезличивание.
balexa
11.07.2018 10:55-1Я вот 10 лет проработал в компаниях типа банков.
Программа не собирается на клиентских машинах, коммиты тоже проверяются на ревью. Дата миниг тоже не рабочей машине делается, так что на рабочей машине будет в лучшем случае ограниченный набор тестовых данных для разработки.
Ситуация когда у разработчика будет полный срез данных со всеми клиентами — это удел полуподвальных контор, там секурити офицер если будет, то чисто для галочки и получения сертификатов.
balexa
11.07.2018 10:50-1Откуда у разработчика клиентские данные? Если безопасность построена нормально, у разработчиков доступа на продакшена может в принципе не быть. Как кстати и у админов, внезапно. Только через всякие системы которые выдают ограниченный доступ в консоль после получения всех апрувов во внутренней системе инцидентов.
Golem765
10.07.2018 23:54Как этому всему научиться??)
sebres Автор
11.07.2018 01:00Много читать и пробовать, пробовать… пробовать (практика — самая лучшая наука:)
Merkat0r
11.07.2018 11:52+1За бездумную практику можно и весьма практично уехать в места, не столь отдаленные.
sebres Автор
11.07.2018 12:17Практикуйтесь на… кошках
Germanets
11.07.2018 15:27На самом деле — сначала стоит практиковаться на специальных сборках для обучения пентесту и взлому, параллельно начинать глядеть в строну различных, зачастую открытых CTF-соревнований, к примеру, пытаться попасть в существующую или сформировать собственную команду… Можно ещё на самом себе практиковаться, смотреть разборы тех или иных написанных эксплойтов на уже известные уязвимости, пытаться написать самому…
А второй по простоте способ не «уехать в места, не столь отдаленные» — смотреть в сторону компаний с открытым баг-баунти, причём внимательно изучая их условия…sebres Автор
11.07.2018 15:59Я не люблю пентест (о чем и написал в статье), пентест имеет смысл когда это массовое действо, т.е. типа bounty program — больше шансов что кому-то повезет (долбить вслепую на поиск теоретической уязвимости — очень неблагодарное занятие).
И я не думал, что на русскоязычной площадке нужно развернуто про «тренироваться на кошках»…Germanets
11.07.2018 16:51Блин, я видимо зря отвечал именно на это сообщение, так как по сути это ответ на вот это сообщение от Golem765, просто развёрнутый вариант вашего комментария… А кто минусует — мог бы хоть аргументацию привести, что не так-то…
gohan
11.07.2018 00:01А можно по старой вашей статье вопрос? Это где ломали казино. А то я её не видел в своё время, а теперь там комментарии закрыты.
Да, еще кое-что: это же казино, т.е. человек не стесненный средствами имеет какое-никакое преимущество перед соперниками, при прочих равных. Как минимум может позволить себе чаще рисковать. В общем, если бы я там играл, мог бы и «почти» легально выигрывать кучу денег у других клиентов этого казино, «обманывая» при этом саму компанию на гораздо меньшую сумму.
Написано было вот это. Я правильно понимаю, что вы решили будто при игре в покер доступ к «чаще рисковать» даёт преимущество над соперником? На самом деле это не так, если вы будете играть более агрессивно, типа «у меня деньги бесконечные», то профессионал за столом наоборот получит больший перевес по матожиданию выигрыша, хотя его дисперсия вырастет. Сам играл очень много в своё время. Хороший игрок всегда держит запас денег такой, чтобы несколько крупных проигранных раздач не меняли картину, так что попытаться задавить или напугать понимающих людей не выйдет. Помогло бы разве что эксплуатировать излишне осторожных и пугливых, но это и так всегда можно делать.sebres Автор
11.07.2018 01:14а теперь там комментарии закрыты.
странно, а я можу… новый функционал хабра какой?
Я правильно понимаю, что вы решили будто при игре в покер доступ к «чаще рисковать» даёт преимущество над соперником?
Вы неправильно понимаете…
Во первых, вы почему то пропустили слова "при прочих равных".
Во вторых, давайте начнем для примера с других игр (вы не думаете же, что там один покер), например преф (и подобные), там есть такое понятие "сыграть мизер", и в некоторых вариантах игры, если больше рискуя, я смогу чаще успешно брать мизер (а это нередко связано с определенным риском), у соперников шансы сорвать куш уменьшаются прямо пропорционально разнице между суммами, которые мы в теории можем позволить себе "выбросить" (опять же при прочих равных).gohan
11.07.2018 02:37Во первых, вы почему то пропустили слова «при прочих равных».
Во вторых, давайте начнем для примера с других игр (вы не думаете же, что там один покер), например преф (и подобные)
Ну, прочих равных не будет, всё-таки никто не даст выбирать соперника по своему вкусу, а то все бы хотели играть только за столами с более слабыми. Без огромной подготовки садиться играть по хорошим ставкам нет смысла. Ну, если деньги бесконечные, то конечно сливать их не так обидно.
А вот про преф в онлайне на деньги я не слышал вообще, по-моему там уже давно компьютерный бот умеет играть оптимально? Тогда онлайн не имеет смысла. Покер такая же судьба ждёт уже скоро, к сожалению.sebres Автор
11.07.2018 02:44прочих равных… все бы хотели играть только с более слабыми.
У вас очень странное понимание слова "равных".
Ну, если деньги бесконечные, то конечно сливать их не так обидно.
Т.е. начало доходить таки...
gohan
11.07.2018 10:36Т.е. начало доходить таки...
Что начало доходить? Слив-то будет именно сливом, перевеса от бесконечных денег нет. Иначе в карты выигрывали бы самые богатые.
Mur81
11.07.2018 02:09Вот так вот — взял исходники опен-сорсного проекта и за вечер нашел там RCE зиродея (я всё правильно понял ведь?).
А потом они говорят, что «безопасность через неизвестность» это плохо, а опен-сорс хорошо (ведь там 100500 членов комьюнити провели аудит кода вдоль и поперёк).
PS К коменту относится со здоровой долей юмора (если кто не понял).sebres Автор
11.07.2018 02:18Да… опыт… ломать, не строить.
SthO — плохо… OpnSrc — хорошо (100500 — это где?, 1-2 на бумаге, ну и там овраги).
Именно так и отношусь.
McDermott
11.07.2018 08:45Статья очень интересная!
Попытки объяснить, что система безопасности выстроенная вокруг firewall+proxy+webwasher like content-filter & antivirus, без какой-либо худо-бедно настроенной гибридной IDS (HIDS+APIDS), хонепотов и т.д. и т.п., во первых по определению не является безопасной...
Почему, по вашему мнению, эта система небезопасна «по определению»? В реализованной вами же атаке вряд ли бы помог даже HIPS.ildarz
11.07.2018 12:44+1В реализованной вами же атаке вряд ли бы помог даже HIPS.
Нетипичная активность хостов сети (в данном случае — трафик чата и запуск ПО удаленного управления во время, когда сотрудник отсутствует) — вполне себе повод для алерта.
sebres Автор
11.07.2018 13:05Yep,… с залоченного компа, на минуточку. И с запуском приложения до того ни разу из той программы не вызываемого.
И там вообще было много благодатной почвы, где безопаснику развернуться.McDermott
11.07.2018 13:38И с запуском приложения до того ни разу из той программы не вызываемого.
Есть ли HIPS с эвристикой, которая отслеживает такие случаи? Известные мне HIPS просты как табуретки.sebres Автор
11.07.2018 13:39APIDS привязаный к поведенческим анализаторам, хотя бы той же антивирусной системы.
McDermott
11.07.2018 13:45В принципе, если бы на прокси было настроено блокирующее правило по расписанию (блокировать внешние соединения после 19.00), то и прокси бы хватило.
sebres Автор
11.07.2018 14:04А внешнего соединения там не было — вы о чем? (Через прокси! o..O)
McDermott
11.07.2018 14:17На корпоративном прокси исходящие соединения IRC-клиента и Teamviewer — что они, внутренние, что-ли?
sebres Автор
11.07.2018 14:27А, подумал про входящие (простите, просто у прокси оно почти всё — внешнее). Тогда может быть, не знаю на сколько то реализуемо.
sebres Автор
11.07.2018 14:35Тут всегда вопрос баланса между позакрывать всё и вся и не дать людям повода сбежать (потому что работать стало невыносимо)…
Вы представьте на минуту, вы разраб, у вас цейтнот (сверхурочные после 19:00), вы не понимаете как оно и почему бажит, а внешний «мир» для вас закрыт, не в онлайн-доку заглянуть, не погуглить, не спросить в чате, не (любимое подставить)…
mspain
11.07.2018 10:40Много смеялся с сего кул стори.
На самом деле аудит в большой конторе (даже где неплохо с ИБ) проводят и снаружи и изнутри, при этом вылазят десятки типовых дырищ как в конфигурации ПО, из-за отсутствия обновлений (продуктив жии!!! низя перегружать! а вдруг после патча САПчик упадёт?!?111) и маразмов навроде «админы в netvol положили скрипт с прописанным паролем».
Ломают там где тонко. Искать zeroday в IRC-клиенте одного админа, это ненусветная глупость.
Кстати, выдача ФИО админов — это большой гандикап пентестерам.
Итого: cool story, bro!
amarao
11.07.2018 12:16Можно уточнить, вы когда говорите «не является безопасной по определению», вы на какое определение безопасности ссылаетесь? Или это «фигура речи», которую «не надо воспринимать буквально»?
sebres Автор
11.07.2018 12:23По определению того, что эти отдельные блоки системы «защищают», а именно по порядку — порты, соединения и контент (браузера, и заметьте только определённым образом), и компьютеры (от вирусов).
И всё то — Р а з д е л ь н о.
О какой безопасности всей системы может идти речь?amarao
11.07.2018 13:24+1Можно таки увидеть определение безопасности, на которое вы ссылаетесь?
sebres Автор
11.07.2018 13:30Я вам дал определение от противного, из чего легко делается вывод чем всё то не является.
Если вам показали велосипед, трудно ли определить что автомобилем он не является? Без точного определения собственно автомобиля.amarao
11.07.2018 13:39Объясните мне, пожалуйста, что такое «определение от противного»? Противного чему или кому? Определение — «Объяснение (формулировка), раскрывающее, разъясняющее содержание, смысл чего-н.».
Вы его случайно с доказательством от противного не путаете?
Если вы говорите «велосипед не является автомобилем», то либо вы объясняете почему, либо, если вы говорите «по определению», то вы цитируете определение.
И я очень хочу услышать определение велосипеда «от противного». Прям очень хочу. Вас не затруднит?sebres Автор
11.07.2018 14:03Юмор понятен, имел конечно же ввиду определение чем они все являются, тем самым чем они не могут являтся в принципе.
Пример про велосипед и авто вами не понят, от слова совсем (или вы передёргиваете).
Возьмите например одно свойство — «может самодвигаться». Один им обладает вполне, другой нет (ну за исключением с горы).
Т.е. нужно ли полное определение, чтобы понять что этими средствами не возможно выполнить защиту от множества векторов атаки (умолчим уже про внутреннюю безопасность).
Про векторы же, почитайте любой пейпер типа «Limitations of Network Intrusion Detection», может составите ваше искомое определение.
Рассказывать же вам тут полный университетский курс «Способы борьбы и методы предотвращение вторжения» у меня простите уж нет ни времени, ни желания.amarao
11.07.2018 14:05Тут просто. Если вы говорите «по определению», вы можете это определение сказать. Если не можете, не используйте аргумент «по определению», потому что вы аппелируете к сущности, которой сами не знаете (например, потому что дать определение слова «безопасность» без предварительного описания что такое «опасность» невозможно).
В принципе, это часть большей проблемы в районе обсуждения безопасности — категоричность. Вы говорите со своих позиций, люди со своих, и у вас в этот момент в голове может быть совершенно разная модель угроз и бюджеты.sebres Автор
11.07.2018 14:11Ну найти общий язык всегда возможно… вопрос уровня разжевывания и готовности опонента выслушивать и главное понять аргументы другой стороны (без всяких определений, к слову).
Возвращаясь же к «определению», тогда да — пусть будет «фигура речи», если вам так удобнее.amarao
11.07.2018 14:34Если это фигура речи, то тогда остаётся аргумент про категоричность.
Вы пишите про компанию "… но общий лирический посыл таков — я бросаюсь голословными обвинениями", при этом вы в описании проблемы используете «фигуру речи» для описания проблемы.
Мне кажется, что это одна и та же проблема, просто описанная двумя разными способами.sebres Автор
11.07.2018 14:43Я пишу о том, что они всем отделом включили режим «обиженка», и соответственно «готовности опонента выслушивать» не особо наблюдалось.
При том что я на самом деле, как уж и не пытался слова подобрать, чтобы ненароком не затронуть «честь и достоинство»…
«Троечка» — это же описание итогового вывода, если хотите, для упрощения и чтобы статья не выросла в талмуд. А также по соображениям этического характера (опуская некоторые подробности, на публикацию которых я не получил разрешения).amarao
11.07.2018 15:35+1Да, это ваше описание ситуации. Но то, как вы описывали проблему, показало, что в описании проблемы вы использовали метафоры и фигуры речи, так что позиция их отдела не выглядит неразумной.
Повторю, это результат использования вами фигур речи (которые преувеличения и упрощения).
Возможно, для того, чтобы окружающие смогли понять вашу точку зрения точнее, вы могли бы быть более точным в определениях и оценках (то, что называется «быть сдержанным в оценках»). Я не знаю что точно происходило там, но ваш рассказ использованной стилистикой для описания проблемы поддерживает точку зрения, которую вы осуждали.
Собственно, именно этот конфликт между намерением и реализацией и стал причиной моего комментария.sebres Автор
11.07.2018 16:11Но вы почему-то сделали далекоидущие выводы, не зная «что точно происходило там».
Если упрощая кусок истории (как незначительный эпизод или по каким-либо другим причинам, например мало относится к основной теме статьи), автор сделал так как сделал, и чего-то не проглядывается, это вовсе не обязательно означает, что ваши фантазии будут соответствовать действительности.
Это возможно значит ровно то, что автор не смог увести ваше внимание от этого (с его точки зрения, незначительного) момента, и дал тем самым повод цепляться к деталям. Минус ему-мне за это.
Хотя в теории, для каждой статьи, любой (в меру своей испорченности) может найти повод зацепится за что-нибудь, мозолящее ему глаза.amarao
11.07.2018 16:18Я не делаю предположений о том, что происходило. Я всего лишь задал вопрос к тому, что было написано в посте, и получил ответ, что это «фигура речи», то есть описание в тексте было не точным, а «художественным».
А вот мой вывод был, что если такой же художественный стиль изложения был в общении с сотрудниками, то их мнение о том, что «бросаюсь голословными обвинениями», возможно, было построено не на пустом основании.sebres Автор
11.07.2018 16:32Ваш вывод не верен, все было строго по делу, без лирики.
amarao
12.07.2018 13:49Но в статье лирика и фигуры речи. Почему я должен предположить, что с заказчиком вы общаетесь иначе, чем пишите на широкую публику?
sebres Автор
12.07.2018 14:12То не претензия была, а мое видение ситуации (как она была).
Но все же отвечу, потому что — статья написана художественным стилем, от моего лица, и мы в этой длинной ветке обсуждаем незначительный эпизод (по мнению автора), который был к тому же преднамеренно им сокращен.amarao
12.07.2018 15:48-1Все мои комментарии касались написанного и моих выводов из них. Если вы хотите поменять выводы читателей — меняйте стиль письма.
sebres Автор
12.07.2018 16:05Поправка — «выводы читателей» -> «выводы ОДНОГО читателя»… (ни или некоторых)… Или вы на абсолют (в смысле идеального читателя) претендуете?
Мог бы, но не буду — я такой какой есть, т. е. всё просто не нравится — не читайте.amarao
12.07.2018 16:26Я могу сослаться только на +7 у изначального комментария. Как минимум 8 читателей нашли вашу фигуру речи требующей разъяснения.
Wernisag
11.07.2018 18:44Правильно ли я понимаю, что Вы говорите о неком комплексе защиты (ну что-то вроде фотинет или нечто подобное), а разные программные и железные решения, не связанные между собой комплексно — это и есть не безопасно?
sebres Автор
11.07.2018 19:06Ну в принципе смысл правильный, не так категорично возможно, но все же…
Просто это совершенно точно не firewall+antivir, которые защищают только лишь от того, от чего они защищают.
разные программные и железные решения, не связанные между собой комплексно
Если эти ваши решения покрывают все возможные* векторы атак, то и хорошо. У них было не так.
* Естественно "все", с поправкой на — "с учетом соотношения риск-стоимость-возможность выполнять работу" (а то можно поназакрывать так, что люди побегут или тупо не смогут что-то сделать). Чем-то можно рискнуть (пренебречь) в угоду стоимости, чем-то из-за высокой сложности выполнения и/или рисков "положить" собственно работу (медленно, высокий риск "уронить" что-нибудь нужное, и т.д.). Но если риски оценены и все-то оправдано/обосновано (а не по неведению/лени/итд).
strachkov
11.07.2018 16:26Хотел похвастаться своими шерлоконавыками в определении языковой среды (Max.Mustermann), а Вы и сами все выдали в конце.
P.S. Пишите еще, спасибо!
zirix
11.07.2018 16:30Проверив небольшим скриптом, что logonui залочен,
…
снимающий с него screenshot
А как(через что) вы сделали скриншот на залоченом компьютере?
Если мне не изменяет память, то GetDC(NULL) или GetDC(hWnd) в этом случае не сработает.sebres Автор
11.07.2018 17:09О, тест на внимательность пройден!
Да нет, снять можно на самом деле (только не для remote session и не черезGetDC
,GetWindowDC
и ко)…
Однако и это вовсе не обязательно, просто мне было проще/быстрее (ибо готовый скрипт был).
Можно например тупо найти окошко диалога (первый child внутри) и перебрать всех деток, отправив все caption (типа
GetWindowText(hChildWnd)
)… среди них кроме "Allow Remote Control" и прочего, поверте мне обязательно найдете что-нибудь вида "123 456 789" и "1111".
Хотя я вам их ControlID и так скажу 0x4E82 и 0x4E83…
Да много-много чего можно.sshmakov
11.07.2018 19:53Забавно, что залоченный комп позволяет себя хакнуть, не привлекая внимания соседей по столу.
sebres Автор
11.07.2018 20:11Ну спасение, logout или hibernate (то когда нужно просто чтоб всё сохранить в рабочем виде, а не тест на всю ночь до exception в дебаггере)...
И да, превлекает иногда :)
Мне один знакомый рассказывал, как им с коллегами пришлось выключить комп отсутствующего соседа, потому что он "постоянно громко пикал".
В последствии оказалось попыткой взлома, просто хакер "непутевый" попался и логировал чего-то там не-то бинарное не-то не в той кодировке в консоль (ну а оно ругалось на каждыйчих"\7"
)...
saboteur_kiev
12.07.2018 02:37Понял из статьи, что послужной список в гитхабе с кучей контриьбьюции в опенсорс, то это повод не посмотреть крутой качественный код, а повод его не брать, ибо непонятно чем он будет заниматься на работе? =)
sebres Автор
12.07.2018 02:53Можно прекрасно сочетать ) особенно если тот опенсорс пользуется в работе, а то и является чуть не ядром рабочего стека…
Берите спокойно, то все лучше чем он по всяким хабрам лазить будет
Oxoron
Интригует.
Кстати, в Германии «двойка» — это разве не «хорошо»? Там вроде инвертирована оценочная система.
sebres Автор
Да, в Германии шестибальная система, где 1 — это наша 5, а 6 — это кол.
Но, вопервых я жеж для русскоязычной аудитории писал, а во вторых (понижая голос) — кто вам сказал, что то была немецкая контора?
Oxoron
О, забота о читателе. Уважаю!