임의의 파일을 처리하는 것이 얼마나 안전합니까? 이론적으로 터미널에 표시 될 때

때때로 cat실수로 이진 파일을 만들 때 터미널이 깨져 나옵니다. 신속하게 reset해결할 수있는 것은 없지만 침입자는 이론적으로 터미널에 표시 될 때 임의의 코드를 실행하는 파일을 만들 수 없습니까? 터미널 에뮬레이터 등의 악용을 통해.



답변

이러한 출력을 활용할 수 있는지 여부는 터미널 프로그램 및 전송되는 이스케이프 코드에 따라 해당 터미널이 수행하는 작업에 따라 다릅니다. 나는 그러한 악용 가능한 기능을 가진 터미널 프로그램을 알지 못하며, 이제 유일한 문제는 알 수없는 버퍼 오버플로 또는 이와 유사한 것이 악용 될 수 있다는 것입니다.

일부 구형 hardware터미널의 경우 하드웨어에 해당 키의 명령 시퀀스를 저장하여 이러한 종류의 이스케이프 시퀀스로 기능 키를 프로그래밍 할 때 문제가 될 수 있습니다. 이를 활성화하려면 여전히 물리적 키 누름이 필요합니다.

그러나 Hauke가 엄청나게 ‘브레인 데드’라고 표시된 사람들은 항상 그러한 기능을 문제를 해결하고 자신이 만든 허점을 이해하지 못하는 경우 그러한 기능을 추가하려고합니다. 오픈 소스 소프트웨어에 대한 나의 경험에서, 코드를 보는 많은 눈으로 인해, 이것은 폐쇄 소스와 같이 일어날 가능성이 적습니다. (저는 실리콘 그래스 픽스 Irix의 메일 프로그램에서 9 세 중반에 리시버 머신에서 실행되는 명령, 실행 파일의 실제 경로 등을 포함 할 수 있습니다.)


답변

대부분의 터미널 에뮬레이터는 특정 이스케이프 시퀀스를 수신하면 응답을 다시 보냅니다 ( xterm 제어 시퀀스 문서 참조 ). 예를 들어, \e[0cVT100과 같은 에뮬레이터로 보낼 수 있으며 장치 속성을 다시 보냅니다. \e[?1;2c
(이는 아마도 Keith가 관찰 한 것입니다.) 그러나 이러한 답변은 임의의 문자열이 아닙니다. 여전히 2c치명적인 일을하는 시스템 어딘가에 실행 파일을 갖는 것은 나쁜 생각입니다.

업데이트 : xterm 창의 제목을 설정하고 적절한 이스케이프 시퀀스를 사용 하여 제목다시 보낼 수 있기 때문에 실제로 생각보다 위험이 큽니다 ( http://www.securityfocus.com/bid/6940/ ) . 위의 예와 달리 제목은 거의 임의의 문자열 일 수 있습니다.


답변

PS1 과 같이 덮어 쓰지 않는 한 그놈 터미널 3.6.1의 터미널 제목이 변경됩니다 .

printf "\033]2;Script Kiddie was here\007"

이제 새로운 그놈 터미널 창을 열어서 cat버전 을 테스트하십시오 :

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

그러나 이것은 또한 터미널 제목을 설정합니다.

제목이 명령 줄에 인쇄되는 이스케이프 코드 와 관련된 보안 문제가 있었으므로 cated가 인쇄 할 때 파일을 효과적으로 만들 수 있습니다 (새 줄을 넣을 수 있는지 확실하지 않습니다) 임의의 명령. 아야!


답변

사용 cat하면 코드가 실행되지 않을 수도 있지만 이스케이프 코드는 처리되므로 스크립트가 실제로 악의적 일 때 무해한 것으로 생각하는 데 쉽게 착각 할 수 있습니다.

다음은 “악의적 인”쉘 스크립트를 생성 할 수있는 명령 예입니다.

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

파일을 검사하면 충분히 무해한 것으로 보입니다.

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

그러나 실제로 실행해야한다면 …

$ ./demo.sh
...doing something bad here...

스크립트는 원시 이스케이프 코드를 포함하여 커서를 두 줄 위로 이동하므로 나머지 스크립트는 악성 코드의 맨 위에 쓰여져 숨겨집니다.

거의 모든 다른 프로그램에서 스크립트가 무엇인지 보여줄 것입니다. 파일 내용 (예 cat: moreless -r)을 처리하지 않는 프로그램 만 잘못된 결과를 생성합니다.

그 주 tailhead같은 잘못된 출력을 생성합니다. 따라서 “less + F”를 사용하는 것이 “tail -f”보다 안전합니다.


답변

나는 xterm마치 마치 마치 마치 임의의 문자를 입력하는 것을 경험했습니다. 때로는 개행 문자가 포함되어있어 ngwerm:0riu: command not found응답으로 사용되었습니다. 누군가가 특정하고 유해한 명령을 보내는 파일을 만들 수없는 이유는 없습니다. 따라서 적어도 일부 터미널은 임의의 영향을받는 공격에 취약합니다.


답변

터미널 에뮬레이터는 기본적으로 단순히 전송 된 문자를 인쇄합니다.

새 위치 설정, 색상 변경, 제목 변경 등과 같이 현재 위치에 문자를 단순히 인쇄하는 것 외에는 이스케이프 시퀀스를 사용하여 수행됩니다.

지원되는 이스케이프 시퀀스 세트는 일반적으로 다른 프로세스를 시작하는 방법을 정의하지 않는 ANSI 와 같이 잘 정의 된 표준으로 구성 됩니다. 그러한 시퀀스를 구현하는 것이 가능하지만 의도적으로 그러한 것을 허용하는 터미널 에뮬레이터를 알지 못합니다.

이론적으로 버퍼 오버플로와 같은 버그는 임의의 기능을 트리거하는 데 사용될 수 있습니다. 그러나 이것은 다른 바이너리에서도 가능할 것입니다.


답변

일반적으로 임의 파일을 캐스팅 할 위험이 없습니다. 파일을 분석하는 일반적인 방법은 다음을 수행하는 것입니다.

$ file <mystery file>
$ strings <mystery file> | less

위의 file명령을 통해 파일 형식을 결정할 strings수 있으며 명령을 사용하면 식별 할 수없는 바이너리 파일에서 식별 가능한 문자열을 덤프 할 수 있습니다.

파일 출력

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

문자열 출력

$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...