Взлом сервиса

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

Есть у меня (точнее, был) старый сервис GitLab, которым я пользовался в те времена, когда у Github не было возможности хостить приватные репозитории, так же нравился его встроенный CI. Но уже лет пять как я использую только Github, а Гитлаб крутился просто для истории. В Ноябре мониторинг сказал что контейнер с Гитлабом жрёт аномально ресурсов (в первую очередь CPU) и я его, не разбираясь, просто погасил. Я тогда подумал что его взломали и он спам рассылает.

Сегодня вот решил немного прибраться и окончательно удалить его. Запустил его снова, что бы глянуть — не забыл ли чего, но работал он как-то криво, говорил что все проекты пустые. Какое же моё удивление было, когда оказалось что репозитории зашифрованы, а по папкам раскидан __$$RECOVERY_README$$__.html с настойчивой просьбой поделиться финансами. Я посмотрел по названиям, вроде ничего не потеряно, но осадочек, как говориться — остался. Да, конечно мы делаем бекапы, но как раз этот сервис я подчистил, оставив только последний снапшот при переносе на другой диск.

Мораль такова — делайте бекапы, если сервис не используется — то гасите его или продолжайте обслуживать и обновлять. Используйте современные методы деплоя и изоляции: Gitlab выполнялся в контейнере, который в свою очередь был изолирован в виртуалке, которая в свою очередь находится в DMZ. Таким образом взломщики смогли только подгадить никому не нужные данные, даже получив возможность выполнения произвольного кода.

Сама дыра: CVE-2021-22205, Gitlab был версии 13.3 (последний раз обновлял в Августе 2020).

Выложены наработки по PHP

Выложил свои старые (2008-2009) разработки на PHP, со времен более активного кодирования под web. Необходимость быстро создавать разные админки, панельки, приложения и простые сайтики остаётся и поныне. Мой набор скриптов для простых решений простых задач не собирается терять эффективность — кода мало, выглядят хорошо, удобно пользоваться.

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

Страничка пакета скриптов PHP Lightweght Classes

Обновление VKMM 0.1.2

В процессе портирования программы VKMM сделал давно актуальный фикс — ВКонтакте уже довольно давно присылает 302 редирект на страницу ошибки, вместо прямого кода ошибки HTTP 404. С точки зрения QNetworkReply разумеется редирект не считается ошибкой, что приводило к зависаниям стрима, если плейлист был открыт давно (и ссылки протухли).

Обработка редиректа в Qt выполняется достаточно просто:

1. Присоединяемся к QNetworkReply::finished

connect(netReply, &QNetworkReply::finished, this, &mStream::onNetResult);

2. В слоте проверяем код статуса HTTP на редирект:

void mStream::onNetResult()
{
QNetworkReply* reply = qobject_cast(sender());
Q_CHECK_PTR(reply);

if (!reply) return;

switch (reply->error())
{
case QNetworkReply::NoError:
{
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
switch (statusCode) {
case 301:
case 302:
case 307:
qDebug()

Точка входа Qt5 программы и компилятор Visual Studio 2012+

Многие сталкивались с тем что при компиляции студией Qt-проектов (и не только) Windows не хочет использовать стандартную функцию main(), а требует свои

WinMain

для GUI приложений и при использовании UNICODE, выдавая ошибки линковки вроде этих:

LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup

или

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

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

/ENTRY:main

или

#pragma comment( linker, «/entry:main» )

Но сейчас такой способ больше не работает, программа будет падать при старте. Если вам не нужна поддержка WCHAR в параметрах argv, то проще всего слинковать со специальной служебной либой Qt5 для линковки с main(). Библиотека называется Qt5::WinMain:

IF (BUILD_WIN32)
TARGET_LINK_LIBRARIES(${PROJECT} Qt5::WinMain) # Correct entry point
ENDIF()

VKMM (Vkontakte Music Mania) теперь open-source

Мой старый проект (основное развитие в 2012 году) гибридного музыкального плеера VKMM выложен в открытый доступ.

Перед выкладкой выполнил портирование на Qt5. Были сложности с компиляцией Qt5 проекта под Windows, но кажется что (почти) всё работает. Точно есть проблемы с last.fm API и событиями в потоках движка плеера.

Проект на gitgub: github.com:petrows / vkmm-desktop