June 27, 2023

ДАВАЙ ОБЩАТЬСЯ В "ИРКЕ"

Благодарность за помощь выражаю своему коллеге - @secur30nly

Чтобы обеспечить анонимную связь через протокол IRC необходимо выполнить ряд шагов.

Для начала поднимаем на облаке виртуальную машину (Debian):

cloud.yandex.ru - в качестве теста, можно использовать облако Яндекса.

В разделе Сервисы выбираем пункт Compute Cloud

Жмем подключиться:

Задаем название облаку:

Выбираем пункт Compute Cloud:

Выбираем Virtual machines:

Нажимаем на Create VM:

Задаем параметры виртуальной машины как на скриншотах ниже:

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

ssh-keygen -t rsa

Теперь в директории .shh появилась пара ключей:

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

cat yandex_cloud_irc.pub

Далее нажимаем Create VM:

После запуска VM, подключаемся к ней по ssh, используя выданный адрес:

ssh [email protected] -i yandex_cloud_irc

Обновляем ОС на виртуальной машине, которая должна быть поднята на облаке:

sudo apt update

Далее на этой же машине разворачиваем серверную часть ПО, которое будет позволять общаться клиентам:

sudo apt-get install inspircd

Устанавливаем фаервол и даем доступы на порты подключения для администрирования и использования сервиса обмена сообщениями:

sudo apt install ufw
ufw allow 22/tcp
ufw allow <irc server port>/tcp 
ufw enable

Настраиваем SSL чтобы пересылаемые сообщения не были в открытом виде показаны при сниффинге трафика:

Устанавливаем несколько необходимых зависимостей:

sudo apt install gnutls-bin libcurl3-gnutls libneon27-gnutls

Создаем папку ssl по пути - /etc/inspircd/ssl

Теперь в этой папке генерируем приватный ключ для СА:

openssl genrsa 2048 > ca-key.pem

Генерируем Х509 сертификат для СА:

openssl req -new -x509 -nodes -days 365000 \\
   -key ca-key.pem \\
   -out ca-cert.pem

Создаем сертификат и ключ для сервера и для этого мы должны сгенерировать закрытый ключ и запрос на сертификат:

openssl req -newkey rsa:2048 -nodes -days 365000 \\
   -keyout server-key.pem \\
   -out server-req.pem

Далее сгенерировать сертификат X509 для сервера:

openssl x509 -req -days 365000 -set_serial 01 \\
   -in server-req.pem \\
   -out server-cert.pem \\
   -CA ca-cert.pem \\
   -CAkey ca-key.pem

Генерируем DHParams - это некий секретный ключ, который генерируется в системе для криптографических целей:

openssl dhparam -out dhparams.pem 2048

Устанавливаем полные привилегии на файлы в папке ssl:

chmod 777 ssl/*

Добавляем пул параметров в конфигурационный файл - /etc/inspircd/inspircd.conf:

<bind address="0.0.0.0" port="63238" type="clients" ssl="gnutls">
<gnutls cafile="/etc/inspircd/ssl/ca-cert.pem"
        certfile="/etc/inspircd/ssl/server-cert.pem"
        dhfile="/etc/inspircd/ssl/dhparams.pem"
        keyfile="/etc/inspircd/ssl/server-key.pem"
        priority="SECURE192:-VERS-SSL3.0">
<module name="m_ssl_gnutls.so">

Изначальный файл конфигурации, где я подсветил изменненные поля комментарием "# changed place":

# This is just a more or less working example configuration file, please
# customize it for your needs!
#
# Once more: Please see the examples in /usr/share/doc/inspircd/examples/
<server name="irc.local"
        description="Local IRC Server"
        network="Localnet">
**<admin name="Mister X" # changed place
       nick="X" # changed place
       email="[email protected]"> # changed place
<bind address="0.0.0.0" port="63238" type="clients">** # changed place
<power diepass="3456" restartpass="7890" pause="2"> # changed place
<connect allow="*"
         timeout="60" # changed place
         flood="20"
         threshold="1"
         pingfreq="1200"
         sendq="262144"
         recvq="8192"
         localmax="3"
         globalmax="3">
<class name="Shutdown"
       commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD">
<class name="ServerLink"
       commands="CONNECT SQUIT RCONNECT MKPASSWD MKSHA256">
<class name="BanControl"
       commands="KILL GLINE KLINE ZLINE QLINE ELINE">
<class name="OperChat"
       commands="WALLOPS GLOBOPS SETIDLE SPYLIST SPYNAMES">
<class name="HostCloak"
       commands="SETHOST SETIDENT SETNAME CHGHOST CHGIDENT">
<type name="NetAdmin"
      classes="OperChat BanControl HostCloak Shutdown ServerLink"
      host="netadmin.omega.org.za">
<type name="GlobalOp"
      classes="OperChat BanControl HostCloak ServerLink"
      host="ircop.omega.org.za">
<type name="Helper"
      classes="HostCloak"
      host="helper.omega.org.za">
**<type name="PON" # changed place
      classes="OperChat BanControl HostCloak ServerLink"
      host="trash">**
**<oper name="root"
      password="Ivp99tPdP7" # changed place
      host="*@localhost"
      type="NetAdmin">
<oper name="egor" # changed place
      password="uCII6RLf8" # changed place
      host="*@*" # changed place
      type="PON"> # changed place
<oper name="ruslan" # changed place
      password="8IIsIMIC" # changed place
      host="*@*" # changed place
      type="PON">** # changed place
<files motd="/etc/inspircd/inspircd.motd"
       rules="/etc/inspircd/inspircd.rules">
<channels users="20"
          opers="60">
**<dns server="8.8.8.8" timeout="5">** # changed place
<pid file="/var/run/inspircd/inspircd.pid">
<options prefixquit="Quit: "
         noservices="no"
         qaprefixes="no"
         deprotectself="no"
         deprotectothers="no"
         flatlinks="no"
hideulines="no"
         syntaxhints="no"
         cyclehosts="yes"
         ircumsgprefix="no"
         announcets="yes"
         disablehmac="no"
         hostintopic="yes"
         quietbursts="yes"
         pingwarning="15"
         allowhalfop="yes"
         exemptchanops="">
<security hidewhois=""
          userstats="Pu"
          customversion=""
          hidesplits="no"
          hidebans="no"
          operspywhois="no"
          hidemodes="eI"
          maxtargets="20">
<performance nouserdns="no"
             maxwho="128"
             softlimit="1024"
             somaxconn="128"
             netbuffersize="10240">
<whowas groupsize="30"
        maxgroups="100000"
        maxkeep="3d">
<timesync enable="no" master="no">
<badnick nick="ChanServ" reason="Reserved For Services">
<badnick nick="NickServ" reason="Reserved For Services">
<badnick nick="OperServ" reason="Reserved For Services">
<badnick nick="MemoServ" reason="Reserved For Services">

Перезапускаем сервис:

systemctl restart inspircd.service

Теперь на клиентской машине устанавливаем и запускаем любое приложение для irc, например weechat:

Первым делом добавляем алиас серверу для простоты обращения:

/server add <alias name> <server address>/<server port> -ssl

Попутно отключаем верификацию сертификатов:

/set irc.server.<alias server name>.ssl_verify off

Подключаемся к серверу командой:

/connect <alias name>

Подключаемся под пользователем из файла с конфигурацией:

/oper user pass

Создаем канал для общения или этой же командой заходим в него:

/join #new_chat (or existing chat)

Начинаем обмениваться сообщениями и проверяем трафик, который теперь пошифрован:

Еще больше интересных статей в моем ТГ канале: https://t.me/pro_pentest