12. Приложение Б Проверка целостности приложений

Проверка целостности исполняемых файлов агента выполняется с целью защиты от возможных несанкционированных изменений исполняемых файлов, производится на основании контрольной суммы файлов, посчитанной с помощью ГОСТ алгоритмов.

Для проведения проверки, необходимо наличие установленной КриптоПро CSP 5.0 R2 на сервере notarius (см. Раздел 6.3). На сервера prohibitor и einfahrt скопировать с сервера notarius файл /opt/cprocsp/bin/amd64/cpverify, в рабочий каталог приложений (в данном документе в качестве примера указан путь /distr/einfahrt для einfahrt).

Также в рабочие каталоги einfahrt и notarius (в данном документе в качестве примера указан путь /dist/notarius для notarius, для 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):

172B898C542BE0D4F4EE45002BD9533EF7E0B8035A0B95C3841C06F270B69FED prohibitor
56C692C0203C02EFB2D21A010CD3A4F27AB81B741F4131D10851C6F347EDE388 einfahrt
5801927CC51E85A3E66F6588FD0E62FEBFEBB0FA0926B24977DA9444BA4DB94F 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; }

Проверка целостности должна производиться в следующих случаях:

  • при установке или обновлении агента: вручную администратором;

  • по расписанию, не реже чем раз в полгода: вручную администратором;

  • при использовании СКЗИ класса КС2 требуется настроить автоматический контроль целостности файла notarius_server_http на старте работы сервера с использованием АПМДЗ из состава СКЗИ «КриптоПро CSP 5.0R2» в соответствии с документацией на АПМДЗ.