сценарий wget, но канал это для избиения, только если SHA256 сценария соответствует остроте

wget http://example.com/install.sh -O - | bash запускает скрипт автоматически, но из-за возможного (TLS) нападения на MITM и т.д., это не безопасно. Возможно создать остроту, которая загружает сценарий, но выполняет его, только если это - соответствия хеша то, указанное в остроте? Было бы хорошо, если острота распечатает что-то как Warning! Hash mismatch если проверка хеша перестала работать.

7
задан 3 April 2017 в 12:11

2 ответа

Таким образом, Вы хотите загрузить и работать http://example.com/install.sh.

На данный момент я предполагаю, что Вам сохранили его хеш SHA256 локально в названном файле my-sha256.txt. Файл содержит только сам хеш и символ разрыва строки стиля Unix, таким образом, его размер должен быть точно 65 байтов. Можно создать его путем простого выполнения этого:

sha256sum ORIGINAL_FILE.SH | grep -Eo '^\w+' > my-sha256.txt

То, как Вы распределяете этот файл хеша от своей машины разработки до клиента, не является частью этого ответа (все же, Вы могли бы разъяснить свой вопрос и попросить, чтобы я обновил эту часть на основе Ваших подробных спецификаций).


Фактическая команда, которую Ваш клиент должен выполнить, чтобы загрузить, проверить, и на успехе, выполняется, сценарий мог быть похожим на это:

t=$(mktemp) && wget 'http://example.com/install.sh' -qO "$t" && if sha256sum "$t" | grep -Eo '^\w+' | cmp -s my-sha256.txt ; then bash "$t" ; else echo FAIL ; fi ; rm "$t"

Немного сокращенная и ужасная версия без пробела:

t=$(mktemp)&&wget 'http://example.com/install.sh' -qO"$t"&&if sha256sum "$t"|grep -Eo '^\w+'|cmp -s my-sha256.txt;then bash "$t";else echo FAIL;fi;rm "$t"

Помещенный в несколько строк для удобочитаемости:

t=$(mktemp) && 
wget 'http://example.com/install.sh' -qO "$t" && 
if sha256sum "$t" | grep -Eo '^\w+' | cmp -s my-sha256.txt 
    then bash "$t" 
    else echo FAIL 
fi 
rm "$t"

Если Вы хотите непосредственно обеспечить хеш в команде как строка вместо того, чтобы читать из файла, просто используйте одну из моих исходных версий команды выше и замените возникновение my-sha256.txt с <(echo YOUR_HASH), вставка Вашего реального хеша вместо заполнителя "YOUR_HASH", конечно.

Объяснение:

script/one-liner сначала создает временное использование файла mktemp (использует временную папку системы /tmp).
Затем это использует wget загрузить Ваш сценарий установки с указанного URL и сохранить его во временном файле.
Теперь мы вычисляем его сумму хеша, фильтруем только значение хэш-функции от вывода sha256sum и сравните это с тем, в чем мы сохранили my-sha256.txt.
Если оба хеша будут равняться, то мы вызовем bash с нашим временным файлом сценария как аргумент, еще мы echo FAIL или Вы могли произвести пользовательское сообщение об ошибке.
В конце мы моемся путем удаления нашего временного файла в обоих случаях.


Однако возвращаясь к проблеме безопасного распределения хеша для проверки исходного сценария это решение выше не поможет Вам очень, поскольку это решает одну проблему путем создания другого того же вида.

То, что на самом деле необходимо сделать, должно создать пару ключей GPG (и опубликовать открытый ключ к keyserver), подпишите сценарий с ним и предложите сжатый двоичный файл со знаком для загрузки. Затем позвольте клиенту проверить и дешифровать использование сценария gpg снова и выполненный это на успехе.

4
ответ дан 23 November 2019 в 06:47

Так как цифровые отпечатки GPG используют небезопасный хеш SHA-1, вот острота, которая позволяет аутентификацию с неофициальным хешем SHA256, вычисленным от открытого ключа с

gpg --export <key ID> | sha256sum

команда:

h="<SHA256 hash of exported public key>"; fp="<PGP key SHA1 fingerprint>"; f='key.pub'; gpg --keyserver pgp.mit.edu --recv $fp && gpg --export $fp > $f && if sha256sum $f | grep -Eo '^\w+' | cmp -s <(echo $h); then rm $f && wget https://example.com/install.sh{,.asc} -q && gpg --verify install.sh{.asc,} && bash install.sh; else rm $f; echo "ERROR: Signing key had invalid SHA256 hash"; fi;

0
ответ дан 23 November 2019 в 06:47

Другие вопросы по тегам:

Похожие вопросы: