.. _annex_b: Приложение Б Проверка целостности приложений ============================================ Проверка целостности исполняемых файлов агента выполняется с целью защиты от возможных несанкционированных изменений исполняемых файлов, производится на основании контрольной суммы файлов, посчитанной с помощью ГОСТ алгоритмов. Для проведения проверки, необходимо наличие установленной CryptoPro CSP 5.0 R2 на сервере **notarius** (см. :numref:`notarius_pre_requisites`). На сервер **einfahrt** скопировать с сервера **notarius** файл ``/opt/cprocsp/bin/amd64/cpverify``, в рабочий каталог приложений (в данном документе в качестве примера указан путь ``/distr/einfahrt`` для **einfahrt**). Также в рабочие каталоги **einfahrt** и **notarius** (в данном документе в качестве примера указан путь ``/dist/notarius`` для notarius, для einfahrt см. выше) необходимо выложить: - файл ``GR3411sum``, содержащий контрольные суммы компонентов Агента. Содержимое приведено ниже, его следует скопировать в указанный файл. - файл ``tamper_check.sh``, который осуществляет проверку контрольных сумм компонентов Агента. Содержимое также приведено ниже, его следует скопировать в указанный файл. Файлу ``tamper_check.sh`` следует установить признак исполняемого файла: .. code-block:: bash chmod +x tamper_check.sh Для проверки контрольной суммы следует выполнить команду: .. code-block:: bash ./tamper_check.sh application_name где ``application_name`` - приложение, запускаемое на данном сервере (notaris, einfahrt). По результатам выполнения проверки, будет выдано сообщение об успешном, либо неуспешном завершении. .. attention:: В случае сообщения об ошибке, запуск компонентов агента запрещается по условиям безопасности. Также данный скрипт подходит для выполнения проверки в автоматическом режиме: в случае успешной проверки он возвращает код завершения 0, при неуспешной - код завершения ``1``. Контрольные суммы приложений в данном релизе (файл GR3411sum): .. code-block:: bash DF44CD07AEA504DC9BEE6257C6057A9B49BD1F28A87C5421A42F8FBBC7AB00EB einfahrt 6E1B7D4AC6EE1F7E0E8A8F348045FA00D89E17030D29E4F2C03A18AD4D4CB3D4 notarius Скрипт проверки целостности (файл tamper_check.sh): .. code-block:: bash #!/bin/bash REFERENCE_FILE="GR3411sum" usage() { echo "Usage: $(basename $0) einfahrt|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 на старте работы сервера с использованием АПМДЗ из состава СКЗИ "CryptoPro CSP 5.0R2" в соответствии с документацией на АПМДЗ.