.. _annex_b: Приложение Б Проверка целостности приложений ============================================ Проверка целостности исполняемых файлов агента выполняется с целью защиты от возможных несанкционированных изменений исполняемых файлов, производится на основании контрольной суммы файлов, посчитанной с помощью ГОСТ алгоритмов Для проведения проверки, необходимо наличие установленной CryptoPro CSP на сервере notarius (см. :ref:`notarius_pre_requisites`); на сервера 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) Для проверки контрольной суммы следует выполнить команду .. code-block:: bash ./tamper_check.sh application_name где *application_name* - приложение, запускаемое на данном сервере (notaris, einfahrt, prohibitor) По результатам выполнения проверки, будет выдано сообщение об успешном, либо неуспешном завершении .. attention:: В случае сообщения об ошибке, запуск компонентов агента запрещается по условиям безопасности. Также данный скрипт подходит для выполнения проверки в автоматическом режиме: в случае успешной проверки он возвращает код завершения 0, при неуспешной - код завершения 1 Контрольные суммы приложений в данном релизе (файл GR3411sum) .. code-block:: bash 5596ABA96706CD5150DF6B8FA97BB396E3FDF8223837F5C3C6A2708FA9BFB40D prohibitor D3AC97D774BCD46819667ECA6AE71FE93F28261090DD2FBEB3A78198D58F77B1 einfahrt A49092765F37FC56426A1ED29281CBD508584B8992F6F71AA66B414B3CEBB5E1 notarius Скрипт проверки целостности (файл tamper_check.sh) .. code-block:: bash #!/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; } Проверка целостности должна производиться в следующих случаях: * При установке или обновлении агента: вручную администратором * При каждом включении сервера: автоматически * По расписанию, не реже чем раз в полгода: вручную администратором