14. Приложение Б Проверка целостности приложений
Проверка целостности исполняемых файлов агента выполняется с целью защиты от возможных несанкционированных изменений исполняемых файлов, производится на основании контрольной суммы файлов, посчитанной с помощью ГОСТ алгоритмов
Для проведения проверки, необходимо наличие установленной CryptoPro CSP на сервере notarius (см. Предварительные операции (установка «пре-реквизитов»)); на сервера prohibitor и einfahrt скопировать с сервера notarius файл /opt/cprocsp/bin/amd64/cpverify, в рабочий каталог приложений (в данном документе в качестве примера указаны пути /dist/einfahrt и /dist/prohibitor для einfahrt и prohibitor соответственно)
Также в рабочие каталоги einfahrt, prohibitor и notarius (в данном документе в качестве примера указан путь /dist/notarius для notarius, для prohibitor и einfahrt см. выше) необходимо выложить:
файл GR3411sum, содержащий контрольные суммы компонентов Агента. Содержимое приведено ниже, его следует скопировать в указанный файл
файл tamper_check.sh, который осуществляет проверку контрольных сумм компонентов Агента. Содержимое также приведено ниже, его следует скопировать в указанный файл
Файлу tamper_check.sh следует установить признак исполняемого файла (chmod +x tamper_check.sh)
Для проверки контрольной суммы следует выполнить команду
./tamper_check.sh application_name
где application_name - приложение, запускаемое на данном сервере (notaris, einfahrt, prohibitor)
По результатам выполнения проверки, будет выдано сообщение об успешном, либо неуспешном завершении
Внимание
В случае сообщения об ошибке, запуск компонентов агента запрещается по условиям безопасности.
Также данный скрипт подходит для выполнения проверки в автоматическом режиме: в случае успешной проверки он возвращает код завершения 0, при неуспешной - код завершения 1
Контрольные суммы приложений в данном релизе (файл GR3411sum)
5596ABA96706CD5150DF6B8FA97BB396E3FDF8223837F5C3C6A2708FA9BFB40D prohibitor
D3AC97D774BCD46819667ECA6AE71FE93F28261090DD2FBEB3A78198D58F77B1 einfahrt
A49092765F37FC56426A1ED29281CBD508584B8992F6F71AA66B414B3CEBB5E1 notarius
Скрипт проверки целостности (файл tamper_check.sh)
#!/bin/bash
REFERENCE_FILE="GR3411sum"
usage()
{
echo "Usage: $(basename $0) einfahrt|prohibitor|notarius"
echo "Parameter (application name) is a must!"
exit 1
}
[ "x$1" == "x" ] && usage
case $1 in
"einfahrt"|"prohibitor")
APP="app/app.jar"
;;
"notarius")
APP="notarius_server_http"
;;
*)
usage
;;
esac
[[ ! -f ${REFERENCE_FILE} ]] && { echo "ERROR: Reference file ${REFERENCE_FILE} not found"; exit 1; }
[[ ! -f ${APP} ]] && { echo "ERROR: $1 application executable file ${APP} not found"; exit 1; }
CPVERIFY=$(which cpverify)
if [ -z ${CPVERIFY} ]; then
for CPVERIFY in "/opt/cprocsp/bin/amd64/cpverify" "./cpverify"; do
eval ${CPVERIFY} >/dev/null 2>&1
[ $? -eq 0 ] && break
done
fi
[[ -z ${CPVERIFY} ]] && { echo "ERROR: cpverify utility not found!"; exit 1; }
EXPECTED_SUM=$(grep $1 ${REFERENCE_FILE}| cut -d" " -f1)
[[ -z ${EXPECTED_SUM} ]] && { echo "ERROR: reference checksum for $1 application is not defined"; exit 1; }
REAL_CHECKSUM=$(${CPVERIFY} -mk -alg GR3411_2012_256 ${APP})
echo -e "${EXPECTED_SUM} is an expected checksum for $1;\n${REAL_CHECKSUM} is a real checksum"
[[ ${REAL_CHECKSUM} == ${EXPECTED_SUM} ]] && { echo "OK: checksum matched"; exit 0; } || { echo "ERROR: Real checksum do not match with expected!"; exit 1; }
Проверка целостности должна производиться в следующих случаях:
При установке или обновлении агента: вручную администратором
При каждом включении сервера: автоматически
По расписанию, не реже чем раз в полгода: вручную администратором