По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Зачастую взлом инфраструктуры происходит не с помощью сверхсекретных разработок или специально созданных "организмов" ("вирусов", "червей", "пауков", "дятлов" - нужное подчеркнуть), а из-за стандартных ошибок в настройках и дизайне. Ликвидировать эти недочёты - проще простого, но с такой же простотой они и создают огромные возможности для хакерских атак. Как отмечают специалисты по безопасности, появления подобных упущений в системе встречается настолько часто, что создаётся впечатление, что для таких ошибок существуют спецкурсы. Поэтому задачей данной статьи не является рассказ о самых современных методах защиты - мы просто постараемся заставить читателей задаться вопросом: "А всё ли хорошо в нашей системе безопасности и всё ли мы предусмотрели для того, чтобы конкуренты не смогли воспользоваться нашими данными и разработками и как устранить неполадки в нашей системе?".
Локальная учётная запись? Забудьте об этом.
Уж сколько раз твердили миру... Слова дедушки Крылова как нельзя лучше характеризуют данную ситуацию - она постоянно возникает и о ней всё время напоминают. Не надо (совсем нельзя) создавать доменной групповой политикой локальные учетные записи на хостах в вашем домене. Говоря военными терминами - уровень опасности красный.
Причина самая банальная - данные по записи (в том числе и пароль) хранится в открытом доступе и по умолчанию доступен всем участникам группы. Если кому интересно, то он находится в файле groups.xml, в ресурсе sysvol контроллера домена, но при этом ключ один на всех. Таким образом, любой желающий может скачать файл и путём нехитрых телодвижений стать администратором группы. Думаю о последствиях говорить не надо.
Чтобы не получилось подобных конфузов надо просто добавлять только доменные учетные записи в локальные группы на хостах.
Права юзеров - на необходимый минимум.
Каждая учётная запись имеет свои права для работы в системе и создана для работы конкретной направленности. Поэтому необходимо минимизировать права каждого пользователя системы, так чтобы они подходили под зону его ответственности. Таким образом, снизится риск утраты контроля над записью, и каждый будет знать только свою, необходимую ему информацию.
UAC - на максимум!
Поставьте на максимум User Account Control (UAC). Его, конечно, можно обойти, но он создаст лишнюю нагрузку для атаки, а время в таких вопросах - играет Вам на руку.
Никакого доступа к учетным данным и хэшам
MIMIKATZ - это утилита, которая очищает память процесса, ответственного за проверку подлинности Windows (LSASS). Затем она и выдает пароли в виде открытого текста и хеш-коды NTLM, которые злоумышленник может использовать для перемещения по сети. Чтобы защититься от неё, надо соблюдать несколько простых правил:
Обновите ваш Active Directory как минимум до 2012 R2;
Следите за обновлениями Windows и постоянно их устанавливайте;
Помещайте важные учетные записи в группу защищенных пользователей и установите параметр реестра;
Не предоставляйте учетной записи больше прав администратора, чем им нужно;
Продолжим тему NTLM, поднятую в предыдущем пункте. Его нужно запретить - от слова совсем. Есть такая замечательная штука, как pass-the-hash. Она, как это можно понять из названия, передаёт хеш NTLM на абсолютно любой хостинг, где разрешён NTLM и атакующий всё про вас узнает. Более того, его также можно передавать вместо учетной записи и ее пароля при атаках.
Навешайте ярлыков на рабочий стол
В прямом смысле - поставьте ярлыки на рабочий стол, которые будут связывать с общими файловыми ресурсами. Тем самым Вы уйдёте от сетевых дисков, а malware почти никогда не воспримет их как сетевые ресурсы. Причина, как всегда, банальная - malware путём перебора букв ищет названия дисков. Конечно, данный совет подходит не всем компаниям, но если возможность подобного похода существует - попробуйте.
Отключите скрытые файловые ресурсы!
И вновь из-за банальной причины. Они - первоочередная цель действия malware и злоумышленников. Конечно, это не все инструменты защиты инфраструктуры, но каждый случай нужно рассматривать отдельно, как и индивидуальные настройки для каждой инфраструктуры.
Многие слышали, но боялись "пощупать" страшного зверя по имени FreeSwitch (FS). Уверяю Вас, что страшного ничего нет. Правда придется перестроить свои мозги на его понимание. Он сильно отличается от Asterisk. И хотя FS такая же программная АТС как и Asterisk, но задачи у них разные. FS позиционируется как "провайдерская" АТС, а Asterisk офисный вариант. Несмотря на это, я его использую даже, как говорится, "для дома, для семьи", то есть дома на одноплатнике Orange PI Plus 2E. Так как на нем стоит Ubuntu 16, то описывать установку я буду для Ubuntu из исходников.
Если кому-то нужно попроще, то может установить на Debian (разработчики именно его рекомендуют.
Как поставить из пакетов можно почитать здесь https://freeswitch.org/confluence/display/FREESWITCH/Linux
А для самых искушенных даже на Windows :) https://freeswitch.org/confluence/display/FREESWITCH/Windows
Сначала необходимо выполнить обновление системы:
apt-get update
apt-get upgrade
Установим зависимости:
apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool make python-dev gawk pkg-config libtiff5-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev libtool-bin libopus-dev libshout3-dev libmpg123-dev libmp3lame-dev libsndfile-dev libavresample-dev libswscale-dev libpng-dev libpng++-dev mpg123
После этого перезагружаемся:
reboot
Создаем папку и клонируем гит:
cd /usr/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git
cd /usr/src/freeswitch
./bootstrap.sh –j
Подключаем необходимые модули:
mcedit modules.conf
+ mod_rtmp
+ mod_directory
+ mod_callcenter
+ mod_dingaling
+ mod_shout
+ mod_cidlookup
+ mod_curl
+ mod_xml_curl
Мне нужно было использовать zrtp и хранить данные в базе PostgreSQL (кстати, разработчики считают MySQL недобазой :)) Собираем с ключами:
./configure --enable-zrtp --enable-core-pgsql-support
make
make install
Если при сборке FS ругается на openssl (switch_core_cert.lo) или что то подобное, то нужно проверить версию. Под 1.1.0 не устанавливается. Нужно ставить 1.0.2
Устанавливаем звуковые файлы:
8 kHz Standard Audio
make sounds-install
make moh-install
16 kHz High Definition Audio
make hd-moh-install
make hd-sounds-install
32 kHz Ultra High Definition Audio
make uhd-moh-install
make uhd-sounds-install
48 kHz CD Quality Audio
make cd-sounds-install
make cd-moh-install
Установим русские звуковые файлы:
make sounds-ru-install
make cd-sounds-ru-install
make uhd-sounds-ru-install
make hd-sounds-ru-install
Установим права и владельцев:
adduser --disabled-password --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup daemon freeswitch
chown -R freeswitch:daemon /usr/local/freeswitch/
chmod -R o-rwx /usr/local/freeswitch/
Создадим init скрипт для запуска /etc/init.d/freeswitch:
#!/bin/bash
### BEGIN INIT INFO
# Provides: freeswitch
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Freeswitch debian init script.
# Author: Matthew Williams
#
### END INIT INFO
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Freeswitch"
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/$NAME
DAEMON_ARGS="-nc"
PIDFILE=/usr/local/freeswitch/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
FS_USER=freeswitch
FS_GROUP=daemon
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 240
ulimit -l unlimited
return 0
}
#
# Function that starts the daemon/service
#
do_start()
{
# Set user to run as
if [ $FS_USER ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
fi
# Set group to run as
if [ $FS_GROUP ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
fi
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null --
|| return 1
do_setlimits
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --
$DAEMON_ARGS
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
Установим ссылку на CLI
cd /usr/local/bin/
ln -s /usr/local/freeswitch/bin/fs_cli fs_cli
Проверим всё ли запускается:
cd /usr/local/freeswitch/bin
./freeswitch
freeswitch@s02d> sofia status (или просто нажимаем F5)
freeswitch@s02d> list_users
Если нет ошибок, и высветились профили и пользователи, то можно отключаться:
freeswitch@s02d> shutdown
Меняем стандартный пароль для всех пользователей (указав свой):
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="default_password=lkhd456hkhggl2"/>
Включаем русский язык, если нужно:
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/elena"/>
<X-PRE-PROCESS cmd="set" data="default_language=ru"/>
После правки применяем изменения:
fs_cli -x "reloadxml"
Устанавливаем необходимые кодеки:
mcedit /usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,PCMU,PCMA,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,PCMU,PCMA,VP8"/>
Ну и в конце стартуем FS:
service freeswitch start
Для подключения к FS используем следующую команду:
fs_cli -rRS
Вот и всё. Мы установили и запустили FreeSwitch. О том, как настраивать пользователей, гейты, диалплан читайте в следующих статьях.
Если вы еще не умеете писать скрипты в системах Unix и Linux, эта статья познакомит с основами написания скриптов.
Написание скриптов в системе Unix или Linux может быть одновременно и простым и чрезвычайно сложным. Все зависит от того, что вы пытаетесь выполнить, используя скрипт. В этой статье мы рассмотрим основы создания скриптов - то, как начать, если вы никогда раньше не создавали скрипты.
Идентификация оболочки.
Сегодня в системах Unix и Linux есть несколько оболочек, которые вы можете использовать. Каждая оболочка - это интерпретатор команд. Он считывает команды и отправляет их ядру для обработки.
Bash является одной из самых популярных оболочек, но существуют также zsh, csh, tcsh и korn. Есть даже оболочка под названием fish, которая может быть особенно полезна новичкам в Linux благодаря полезным параметрам автозаполнения команд. Чтобы определить, какую оболочку вы используете, используйте эту команду:
$ echo $SHELL
/bin/bash
Вы также можете определить свою основную оболочку, просмотрев файл /etc/passwd:
$ grep $USER /etc/passwd
nemo:x:1111:1111:Nemo the Fish:/home/nemo:/bin/bash “
read myfile
else
myfile=$1
fi
if [ ! -f “$myfile” ]; then
echo “Файл не найден: $myfile”
exit
fi
case $myfilein
*.tar) tar xf $myfile;;
*.zip) unzip $myfile;;
*.rar) rar x $myfile;;
*) echo “Нет опций для извлечения $myfile”
esac
Обратите внимание, что этот сценарий также запрашивает имя файла, если оно не было предоставлено, а затем проверяет, действительно ли указанный файл существует. Только после этого выполняется извлечение.
Реакция на ошибки
Вы можете обнаруживать ошибки в скриптах и реагировать на них и тем самым избегать других ошибок. Хитрость заключается в том, чтобы проверять выходные коды после запуска команд. Если код выхода имеет значение, отличное от нуля, произошла ошибка. В этом скрипте проверяется, запущен ли Apache, но отправляем результат проверки в /dev/null. Затем проверяем, не равен ли код выхода нулю, поскольку это означает, что команда ps не получила ответа. Если код выхода не равен нулю, сценарий сообщает пользователю, что Apache не запущен.
#!/bin/bash
ps -ef | grep apache2 > /dev/null
if [ $? != 0 ]; then
echo Apache is not running
exit
fi