터미널에서 이스케이프 시퀀스 공격을 피하는 방법은 무엇입니까?

터미널에서 이스케이프 시퀀스 공격을 피하는 방법은 무엇입니까?

읽다CVE-2009-4487의 세부 사항(로그 파일의 이스케이프 시퀀스 위험에 관한)나는 조금 놀랐다.

견적으로 이동CVE-2009-4487:

nginx 0.7.64는 인쇄할 수 없는 문자를 삭제하지 않고 로그 파일에 데이터를 기록합니다. 이로 인해 원격 공격자가 터미널 에뮬레이터 이스케이프 시퀀스가 ​​포함된 HTTP 요청을 통해 창 제목을 수정하거나 임의의 명령을 실행하거나 파일을 덮어쓸 수 있습니다.

분명히 이것은 실제로 nginx의 보안 취약점이 아니라 터미널 에뮬레이터의 보안 취약점입니다.

물론, cat터미널에 로그 파일을 쓰는 일은 우연히 일어날 수도 있지만 grep로그 파일은 일반적입니다. less어쩌면 이스케이프 시퀀스를 정리하는 것이 가능할 수도 있지만, 어떤 쉘 명령이 이스케이프 시퀀스를 변경하지 않는지 누가 알겠습니까?

나는 동의하는 편이다바니시 반응:

일반적으로 터미널 응답 탈출의 지혜는 종종 의문을 제기해 왔지만 여전히 주요 터미널 에뮬레이션 프로그램은 이러한 시퀀스를 폐기하는 데 적합한 것으로 간주되지 않습니다. 아마도 더 이상 사용되지 않는 1970년대 기술과 호환되려는 잘못된 시도일 수 있습니다. [..] 보안 관점에서 로그 파일에 기록하는 모든 프로그램을 비난하는 것보다 터미널 에뮬레이션 프로그램이 어리석은 일을 중지하도록 하여 이 문제와 기타 보안 문제를 완전히 해결하는 것이 더 생산적일 것입니다. 그리고 모두를 위해.

그래서 내 질문은 다음과 같습니다

더 이상 명령을 실행하거나 이스케이프 시퀀스를 통해 파일을 덮어쓸 수 없도록 xterm을 어떻게 보호합니까?

어떤 X 터미널 에뮬레이터가 이 공격에 저항합니까?

답변1

VT100 터미널(모든 최신 터미널 에뮬레이터가 어느 정도 에뮬레이션함)은 문제가 있는 많은 명령을 지원하지만 최신 에뮬레이터 또는 배포판에서는 문제가 더 많고 덜 유용한 명령을 비활성화합니다. 이는 잠재적 위험의 비완전한 목록입니다.이스케이프 시퀀스(단순히 디스플레이를 읽을 수 없게 만드는 콘텐츠는 제외):

  • rxvt 및 Eterm의 임의 로그 파일 명령HD 무어 보고서. 이는 다행히도 오랫동안 수정된 주요 버그였습니다.
  • 리턴 터미널 상태라고도 알려진 응답 명령은 ENQ( Ctrl+E)에 의해 호출됩니다. 그러면 사용자가 텍스트를 입력한 것처럼 터미널에 텍스트가 삽입됩니다. 그러나 이 텍스트는 공격자가 제어할 수 없습니다. 일반적으로 xterm또는 와 유사한 터미널 자체 이름입니다 screen. 내 시스템(Debian squeeze)에서 xterm은 기본적으로 빈 문자열을 반환합니다(이것은 리소스 제어됨 answerbackString).
  • 장치 속성 명령 ESC [ c등을 보냅니다. 터미널 응답 ESC [ … c( 숫자 및 ASCII 구두점만 포함할 수 있음) 이는 대부분 더 이상 사용되지 않지만 이전 응용 프로그램에서 사용할 수 있는 특정 터미널 기능을 쿼리하는 방법입니다. 마찬가지로 단말기의 응답은 사용자 입력과 구별할 수 없지만 공격자의 통제하에 있지는 않습니다. 제어 시퀀스는 기능 키처럼 보일 수 있지만 사용자가 비정상적인 구성을 가지고 있는 경우에만 가능합니다(내가 접한 일반적인 설정 중 터미널 응답 앞에 붙는 유효한 기능 키 이스케이프 시퀀스가 ​​없습니다).
  • 다양한 장치 제어 기능(DCS 이스케이프, 로 시작 ESC P)
    • DECUDK일반적인 터미널 에뮬레이터에서 (사용자 정의 키를 설정)하면 어떤 해를 끼칠지 모르겠습니다 .
    • DECRQSS(요청 상태 문자열)은 터미널이 이번에는 \eP;로 시작하는 이스케이프 시퀀스로 응답하는 또 다른 명령입니다. \eP키가 유효하기 때문에(++) 문제가 발생할 수 있습니다 Alt.ShiftP
    • Xterm에는 두 가지 실험적 기능도 있습니다: ESC P + p …ESC P + q …, termcap 문자열을 가져오고 설정하는 기능입니다. 설명에 따르면 이는 최소한 기능 키의 효과를 수정하는 데 사용될 수 있습니다.
  • 여러 상태 보고 명령: ( ESC [ … n장치 상태 보고). 터미널은 이스케이프 시퀀스로 응답합니다. 대부분의 이스케이프 시퀀스는 기능 키 이스케이프 시퀀스에 해당하지 않습니다. 문제가 있어 보이는 한 가지는 보고서의 ESC [ 6 n합계가 일련의 숫자인 형식이므로 일부 수정자가 있는 것처럼 보일 수 있다는 것입니다.ESC [ x ; y RxyF3
  • 창 작업 명령 ESC [ … t.
    • 이들 중 일부는 xterm 창의 크기 조정, 아이콘화 등을 허용하는데 이는 파괴적입니다.
    • 이들 중 일부는 터미널이 이스케이프 시퀀스로 응답하도록 합니다. 대부분의 이스케이프 시퀀스는 위험도가 낮은 것처럼 보이지만 두 가지 위험한 명령(각각 터미널 창 아이콘의 레이블과 제목을 포함하는 답변)은 ESC [ 2 0 t공격자 ESC [ 2 1 t가 선택할 수 있습니다.
    • 최소한 Debian squeeze에서는 xterm이 기본적으로 이러한 명령을 무시합니다. allowWindowOps리소스를 설정하거나 선택적으로 disallowedWindowOps리소스를 통해 활성화할 수 있습니다. Ubuntu 10.04의 Gnome 터미널은 기본적으로 헤더 응답도 구현합니다. 다른 터미널이나 버전을 확인하지 않았습니다.
  • 터미널 제목이나 아이콘 이름을 설정하는 명령입니다. xterm 및 대부분의 다른 X 터미널에서는 화면 아래에 이스케이프 시퀀스가 ​​있습니다. 나는 이러한 명령에 대한 우려가 과장되었다고 생각합니다. 특정 수준의 장난을 허용하기는 하지만 모든 웹페이지에 동일한 문제가 존재합니다. 클래스 대신 제목만을 기준으로 창을 조작하는 것은 신뢰할 수 없는 당사자가 제공한 이름으로 파일을 열거나 쉘 스크립트에서 변수 확장을 참조하지 않거나 미친 개 코를 두드리는 것과 비슷합니다. 불평하지 마십시오.ESC ] digit ; title ESC \ESC k title ESC \

나는 Varnish의 반응이 솔직하지 않다고 생각합니다. 비난을 피하려고 하거나 보안 나치 모드에 있는 것처럼 느껴집니다(실제든 아니든 모든 보안 문제는 기능 차단을 정당화합니다).

일반적으로 터미널 응답 탈출의 지혜는 종종 의문을 제기해 왔지만 여전히 주요 터미널 에뮬레이션 프로그램은 이러한 시퀀스를 폐기하는 데 적합한 것으로 간주되지 않습니다. 아마도 더 이상 사용되지 않는 1970년대 기술과 호환되려는 잘못된 시도일 수 있습니다. (...)
보안 관점에서 볼 때 로그 파일에 기록하는 모든 프로그램을 비난하는 것보다 터미널 에뮬레이션 프로그램이 어리석은 일을 중지하도록 하여 이 문제와 기타 보안 문제를 완전히 해결하는 것이 더 생산적일 것입니다. 모든.

대부분의 답변은 유용한 기능에 관한 것입니다. 즉, 응용 프로그램은 실제로 커서 위치 및 창 크기와 같은 사항을 알아야 합니다. 창 제목을 설정하는 것도 매우 유용합니다. 이들에 대한 호출에 전적으로 의존하는 것이 가능 ioctl하지만, 이러한 호출을 수행 ioctl하고 파일 설명자를 전달하는 Unix 스타일 텍스트로 변환하려면 추가 코드와 유틸리티가 필요합니다. 이제 이러한 인터페이스를 변경하는 것은 보여줄 것이 거의 없는 많은 작업이 될 것입니다.

텍스트 파일에는 제어 문자와 같은 인쇄할 수 없는 문자가 포함되어서는 안 됩니다. 로그 파일은 일반적으로 텍스트 파일이어야 합니다. 로그 파일에는 제어 문자가 포함되어서는 안 됩니다.

파일에 이스케이프 시퀀스가 ​​포함될 수 있다는 우려가 있는 경우 편집기에서 파일을 열고 또는 옵션 less없이 -r또는 -R를 통해 확인하세요 cat -v.

답변2

그다지 간단하지 않습니다. 많은 사람들이 xterm프롬프트 등의 일부로 제목을 설정하는 코드를 가지고 있으며 그럴 만한 이유가 있습니다( shutdown잘못된 터미널 창에서 잘못된 시스템을 사용한 사람은 누구나 알 수 있습니다!). 따라서 이를 올바르게 수정하려면 보안 컨텍스트를 도입해야 하며, 이는 셸과 터미널 에뮬레이터 및 사람들의 도트 파일 간의 상호 작용을 심각하게 복잡하게 만듭니다. 또는 저렴한 솔루션을 선택하고 터미널에 표시될 수 있는 모든 것을 정리할 수 있습니다. 이렇게 하면 제어 문자를 눈에 띄게 만들기 위해 이스케이프 처리 문자가 크게 줄어듭니다(로그 파일에서와 같이). 누군가 쉘코드를 주입하려고 합니다.)

(여담으로,포니 코드동일한 문제의 더 심각한 예임에도 불구하고 공식 표준이 되었습니다. 때때로 보안은 사람들이 통제할 수 없는 안전하지 않은 설계를 줄이는 것으로 귀결됩니다. )

관련 정보