Записи с меткой «программизды»

Сегодня я хотел бы познакомить читателей с таким явлением, как экзотические операционки, разработанные крайне малыми силами.
(далее…)

Реклама

Стояла у нас на объекте камера — вот такой вот каркам. И в какой-то момент видеосервер перестал писать с неё данные. При этом IP-адрес есть, веб-морда открывается, но никакие пароли — ни наши, ни стандартные- не подходят. На самой камере снаружи никаких кнопок сброса не наблюдается.

Помня про пляски с хиквиженом, я решил прикола ради позвонить в поддержку. Оказалось, что эти крендели сброс пароля теперь классифицируют как «перепрошивка», стоит это 500 р. в их сервисе. На мои возражения, что прошивка там вполне жива, и слетели именно парольные настройки, а я хочу тупо восстановить доступ, мне начали заливать в уши ебанутую хуйню «типа про безопасность».

Мол, если у вас её спиздят, то злоумышленник может её использовать после сброса ! Я аж охуел, это прям фсб головного мозга какое-то.

На мой вопрос, что мешает злоумышленнику сбросить её за 500р. в их же сервисе или просто продать её на запчасти, и о какой вообще безопасности на объекте можно говорить, если там можно камеру просто безнаказанно отковырять, эти крендели мы ничего не ответили. А теперь собственно про безопасность, как её вижу я.

На это дивной камере открыта целая пачка портов:


PORT STATE SERVICE
80/tcp open http
407/tcp open timbuktu
443/tcp open https
554/tcp open rtsp
787/tcp open qsc
8000/tcp open http-alt

На порт 407 можно зайти телнетом и увидеть какой-то странный трейс прямо вот так сразу, без всякой авторизации:
[Trace]: AVStreamGetAVDataThread 581: gTransFormStatusFunc[8](1) == 0
[Trace]: AVStreamGetAVDataThread 581: gTransFormStatusFunc[8](2) == 0
[Trace]: AVStreamGetAVDataThread 725: Index = 0 Endflag == 255
[Trace]: AVStreamGetAVDataThread 727: VideoPos = 0
[Trace]: AVStreamGetAVDataThread 581: gTransFormStatusFunc[8](1) == 0
[Trace]: AVStreamGetAVDataThread 581: gTransFormStatusFunc[8](2) == 0
[Trace]: AVStreamGetAVDataThread 581: gTransFormStatusFunc[8](1) == 0
[Trace]: AVStreamGetAVDataThread 725: Index = 0 Endflag == 255
[Trace]: AVStreamGetAVDataThread 727: VideoPos = 0

Не удивлюсь, если и на порту 787 чего интересное найдется.

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

В случае с каркамом 2889 все оказалось проще — кнопка спрятана внутри герметичного корпуса. Так что откручиваем внешнее стопорное кольцо, извлекаем саму круглую камеру, и с помощью маленького ключа-шестигранника выкручиваем три винтика сзади. После снятия задней крышки видим кнопочку:

Internal reset button
for carcam 2889P


Выключаем питание, зажимаем кнопку, включаем питание (при зажатой кнопке!), держим 15 секунд, вуаля. И вот за вот это действо сервис хочет 500р , рассказывая тупые баечки про безопасность.

Так и только так — локальной кнопкой — должен быть реализован сброс настроек ! И никак иначе !
Любые «генераторы кодов сброса» при первой же утечке ключей или нахождении уязвимости откроют двери злоумышленникам к миллионам устройств, и даст рождение новым гигантским ботнетам.

Некоторые особо охуевшие конторки хотят скан паспорта. За сброс настроек, ага.

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

Кстати, российский закон о персональных данных и европейский GDPR прямо запрещают подобное.

Так что хакайте это сраное говножелезо как только можно, и в паблик, всё в паблик.

Заметочка 1 : прошивка сраное говно, веб-интерфейс работает только в ие после установки сторонних компонентов. Использовать веб-морду строго внутри виртуальной машины!

Заметочка 2 : Китайское железо откровенно бэкдорнутое, и может остукиваться китайцам. Размещайте камеры в изолированных вланах, не имеющих никакого выхода в интернеты. Доступ до своего ntp-сервера и сервера видеонаблюдения более чем достаточен.

Небольшая заметка о железе, его устаревании и проприетарных технологиях.
(далее…)

В камерах и DVR (IP-видеорегистраторы) hikvision похоже нашли новую багу. Пару лет назад я уже писал очень матерно-ругательную статью про эти железки, но сейчас проблема приобрела серьёзный размах — наблюдались массовые взломы таких систем, сброс настроек (даже при сильных паролях), DDoS-атаки с них (DNS-/NTP-усиление) и использование хакнутого оборудования для атак на другие сети / подбор паролей к сервисам (telnet, ssh, vnc, rdp — точно) и прочему непотребству.

Что интересно, бевардовские камеры и даже длинки, висевшие в тех же сетях, не постарадали, так что проблема чисто хиквижена. Всем срочно патчиться, менять пароли, по возможно выносить IP-камеры в более защищённые сегменты сети.

Если вам нужно повесить камеру на внешний адрес, то НЕ НАДО прифигачивать её сразу внешний адрес напрямую — ни в IPv4, ни в IPv6. Если есть роутер — затащите её за этот роутер и сделайте Port-forward для RTSP вида :

TCP+UDP: xy554 --> 192.168.x.y:554

Для получения видеопотока этого более чем достаточно. Если камера оказалась единственной на объекте (бывает такое) — применить IP-whitelist. Правда если этот вайтлист на камере обслуживает только веб-доступ, но не применяется для доступа по телнет/ссш (да, вам не приглючилось, телнет там живее всех живых и доступен на куче девайсов через интернеты) или иному кривому порту — то может не помочь.

Так что в случае хиквижена — именно big, именно факинг и именно фейл, и именно с секурити.

Программирующим на JS за еду будут небезынтересны такие штуки:
http://utf-8.jp/public/aaencode.html
http://www.jsfuck.com/

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

Демка. ASCII-арт. На JavaScript. Однострочником.

n=setInterval("for(n+=7,i=k,P='p.\\n';i-=1/k;P+=P[i%2?(i%2*j-j+n/k^j)&1:2])j=k/i;p.innerHTML=P",k=64)

Если у вас так или иначе реализован мониторинг, то в какой-то момент возникнет разделение событий и сведений мониторинга по степени важности. И почти наверняка вам потребуется отобразить данные из одной системы в другой системе. Суть данной статьи — как вытащить интересующие графики нагрузки, созданные системой Grafana, во внешнюю самописную систему максимально простым способом, например, для отображения на публичном сайте или в любой другой системе.
(далее…)

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

(далее…)

Очень давно, в самом начале двухтысячных, я как-то пошутил, что виндовс — это симулятор операционной системы, работающий ровно до тех пор, пока админ занимается установкой патчей для патчей к патчам.

После небольшого зависона эта фраза вызывает у многих айтишников разрыв хихикалки.

И вот сегодня, в новостях вижу:

Microsoft выпустила патч для патча, но он по-прежнему не работает.
Microsoft выпустила обновление KB3193494 для Windows 10, призванное исправить проблемы с установкой предыдущего патча KB3189866, однако с его установкой, оказывается, также не все гладко.

13 сентября нынешнего года Microsoft выпустила обновление KB3189866, однако вскоре пользователи стали сообщать о внезапном прекращении процесса инсталляции патча на 45% или 95%. Проблема оказалась повсеместной, поэтому компании пришлось срочно выпускать новое обновление. Обновление KB3193494 содержит те же улучшения, что и KB3189866, но должно работать уже без проблем.

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

«После установки KB3193494 мои сетевые драйверы стали недоступными. После удаления обновления все вернулось в норму. Если KB3193494 установить снова, проблема возвращается», — сообщил один из пользователей форума на сайте Microsoft. Насколько распространена данная проблема, не известно.

http://www.securitylab.ru/news/483918.php

P.S. Учитывая, как микрософт начинает нагибать хомячков с принудительной телеметрией — это я от венды удачно свинтил несколько лет тому назад 😀 😀

Небольшой релаксовый скрипт:

#!/bin/bash

str="I will use backups, white-list SRP and non-admin accounts on Windows BEFORE da_vinci_code infection!";

while true;
do
   for (( i=0; $i<${#str}; i=$(($i+1)) ))
   do
      echo -n "${str:$i:1}";
      sleep 0.1;
   done
   sleep 0.4;
   echo "";
done

Занятнейший, лулзовейший баг в яббл-иос с достаточно лютыми последствиями. Если в ябблодевайсе (iphone, ipad) выставить дату на начало Unix-эпохи — то есть на 1 января 1970 года, то там то ли какие-то даты становятся отрицательными, то ли ещё что-то ломается. 😀 😀 😀

Чудной девайс почти моментально превращается в кирпич, которому не помогают ни ребут, ни включение/выключение, ни даже обновление через кривую анальную сраку itunes + DFU.

Отсутствие полноценно реализованной аппаратной кнопки резета и неизвлекаемый штатным способом аккумулятор не позволяют решить проблему быстро.

Советы от уже опробовавших баг на себе очень занятны:
— запретить в новых версиях иос ставить столь давние даты (sic! всё бы им чего-нибудь запретить 😀 )
— Подождать!!, пока сядет аккум.

Последний совет особенно гуманен. Дело в том, что девайс зависает на этапе «белое яблочко на чёрном экране» — то есть когда радиомодули, графический ускоритель и прочее жрущее энергию железо не активировано. Почти черный OLED-дисплей жрёт не столь много. Так что ждать естественного саморазряда даже тощего аккума из ябблодевайса в такой ситуации придётся долго.

Особенно будет зачётно, если таймер питается не просто от основного аккума, но и дополнительно поддержан от какого-нибудь smd-суперконденсатора — ждать сброса часов придется вечность.

Так что если вы — заядлый попаданец, которого может через темпоральную аномалию закинуть в прошлое — айфон с собой не берите 😀 😀

P.S. Телеканал «Дождь» рассказал об этом в какой-то очередной педераче. Некоторые долбы сразу же попробовали. Сервис-центры ликуют.

Сегодня я расскажу про одну анально огороженную вдупель тивоизированную кривую железку, от визита в офис разработчиков которой с канистрой особо жгучего алюминий-органического напалма и ржавым топором меня удержала лишь удалённость китайской компании ну и совсем немного — сложность и опасность изготовления такого напалма в кустарных условиях =).

ПРЕДУПЕРЖДЕНИЕ: если у вас аллергия на крепкие ругательства — вам читать дальше категорически нельзя. Аллергия закончится для вас анафилактическим шоком.
(далее…)

Google Drive под SRP

Posted: 2015-09-16 in IT, Software
Метки:

Обнаружил тут, что Гугл-Диск не работает на виндовс, когда Software Restriction Policies включены в режим белого списка с контролем DLL.
Причина такой хуиты — то, что гугло-диск распаковывает в %UserProfile%\AppData\Local\Temp\_MEI***** пачку питоновского окружения вместе с dll-ками и pyd-файлами, и со всем этим непотребством пытается взлететь. После чего получает от венды по щам и тихо умирает с сообщением «Error in …\Temp\…\python27.dll … Error code 1206».

Попытка прописать все эти либы в белый список по хэшу успехом не увенчалась — нужен более глубокий дебаг. Как временное решение — перевести SRP в режим «белый список, но без контроля DLL».

Причём даже если в систему поставить Python 2.7.10 под Windows, гугло-диск по-прежнему использует свои либы, запускаемые из темпарного каталога, а не установленный пакет.
Вот такой он беспощадный, виндовс-софт.

Чем опасен такой подвид DLL-Hell, позволяющий подмену системных библиотек — читать тут:
http://forum.oszone.net/post-2125485.html
http://securityxploded.com/dll-injection-and-hooking.php
http://www.it.uu.se/edu/course/homepage/sakdat/ht05/assignments/pm/programme/DLL_Spoofing_in_Windows.pdf

Так что размер компании, её известность и финансовые показатели ещё НИЧЕГО не говорят о качестве выпускаемого софта. Если честно, такой кривой подлянки от гуглового софта я никак не ожидал.

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

Но тут я на просторах хабра откопал настолько эпичное, что не могу не поделиться.
(далее…)

Всем привет. Сегодня я расскажу о том, как расчистить авгиевы конюшни без помощи Геракла заставить работать кривой говнософт, написанный программиздами без ознакомления с современными майкрософтовскими мануалами. Пример такого софта — ПО для сдачи бухгалтерской и налоговой отчётности «Аргос-Налогоплательщик» ( http://argos-nalog.ru/elektronnaya-otchetnost/ ).
(далее…)

Обычно, мне не особо интересно делиться ссылками на сторонние сайты. Но тут чего-то вдруг решил.

http://www.insecam.cc/ — весёлые затейники собрали огромную базу IP-камер с паролями по-умолчанию, и сделали к этому интерфейсик для просмотра видеопотоков с открытых всему миру CCTV-камер в браузере. Типа, улыбнитесь, вас снимает нескрытая камера, привет сети и всё такое. Вуайеристы должны писать кипятком, владельцы камер — менять пароли и явки. Напоминаю, что на некоторых моделях камер не выключен NTP (превед, DDoS), и такая камера может послужить плацдармом для проникновения во внутренние сети.

Блог Сергея Лимара Пример того, как красива может быть математическая наука. Ну и собственный движок блога, написанный на Haskell — внушает.

Его же рук дело — портирование библиотеки libqrencode на JavaScript, что позволило создать вот такой вот онлайн-генератор QR-кодов:
http://www.qrmania.ru/
Из ценного — возможность регулировать не только стиль и размер, но и количество избыточной информации в коде. Оттуда же я узнал, что в QR есть не просто текст, но и разные типы структурированных данных, которые хорошо понимаются всякими тулзами на смартфонах.
И самый писк — генерация полностью на стороне клиента, блоки наших данных по сети не гуляют.

Ну и ещё блог одного доброго программиста: http://eax.me/

Вообщем, вот примерно чем живет совремнное программирование. Портирование всяких интересных бибилиотек на JS, функциональное программирование, язык Scala и подобные интересные штуки. А вовсе не говнокодингом на дельфях в обнимку с протухшим трупом BDE 😀

Итак, первая радость от применения мультипоточности в Perl разбилась от жестокого удара граблями. …

(далее…)

Perl !

Posted: 2012-02-24 in IT
Метки:

Нашел блог замечательного человека — http://eax.me/

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

push @threads, threads->create(&thread_func, $_) for(1..THREADS_NUM);
$_->join for(@threads);

я например сделал многопоточную пинговалку для железок гораздо более быстрой и красивой по своему синтаксису. Фишка в чем — мы сперва _создаем_ все нити, и только потом в отдельном цикле делаем им join(), чтобы основной процесс дождался их завершения. К чему это я: если у вас внутри нити запускается процесс связи с какой-нить неспешной железкой через ssh/telnet, и таких железок — сотни штук, то коннектиться к железке и что-то делать нить начнет сразу после create(), и только после того, как все они создадудтся, пройзойдет их привязка через join(). Итог — опрос 120 железок занимает 0.8 секунды, по величине тормозов самой тормозной железки.
Если же сделать threads->create(&thread_func, $_)->join() прямо в первом цикле, создающем нити, то следующая нить создастся только после того, как выполнится join() для предыдущей, а он в свою очередь выполнится только после завершения вызванной при создании нити функции thread_func. И никакой многопоточности не будет, железки будут опрашиваться по очереди, и время опроса будет не 0.8 секунды, а почти две минуты.

Там еще много такой красоты, обязательно смотреть и начинать любить Perl.

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

CSS2

Posted: 2007-05-21 in IT
Метки:

Тут кое-кто просил дать чего-нибудь почитать про CSS 2.

Старый мануал затерялся в недрах жесткого диска, читаем тут:
http://css.manual.ru/

http://www.opennet.ru/docs/RUS/CSS2/intro.html