![Vim은 복사-붙여넣기 공격에 면역인가요?](https://linux55.com/image/108866/Vim%EC%9D%80%20%EB%B3%B5%EC%82%AC-%EB%B6%99%EC%97%AC%EB%84%A3%EA%B8%B0%20%EA%B3%B5%EA%B2%A9%EC%97%90%20%EB%A9%B4%EC%97%AD%EC%9D%B8%EA%B0%80%EC%9A%94%3F.png)
당신은해야절대로 웹에서 터미널에 붙여넣지 마세요.. 대신 텍스트 편집기에 붙여넣고 명령을 확인한 다음 터미널에 붙여넣어야 합니다.
괜찮습니다. 하지만 Vim이 내 텍스트 편집기라면 어떨까요? Vim을 명령 모드로 전환하고 악의적인 명령을 실행하는 것을 가짜로 만드는 것이 가능합니까?
답변1
짧은 답변:Vim은 많은 경우에 이러한 유형의 공격에 취약합니다(삽입 모드에서 텍스트를 붙여넣을 때).
개념의 증거
링크된 기사를 시작점으로 사용하여 다음 코드를 사용하여 웹 페이지를 신속하게 만들 수 있었습니다. HTML 스팬 요소와 CSS를 사용하여 ls -la
일반 시청자에게만 표시되도록 텍스트의 중간 부분을 숨겼습니다. 소스). 참고: ^[
이스케이프 문자 ^M
이자 캐리지 리턴 문자입니다. Stack Exchange는 사용자 입력을 삭제하고 CSS를 사용하여 숨겨진 콘텐츠를 방지하므로 업로드했습니다.개념의 증거.
ls ^[:echom "This could be a silent command."^Mi -la
삽입 모드에서 이 텍스트를 터미널 Vim에 붙여넣으면(일부 한정자와 함께, 아래 참조) 이를 볼 수 있지만 명령 ls -la
을 실행하면 :messages
숨겨진 Vim 명령의 결과를 볼 수 있습니다.
방어
이 공격을 방어하려면 일반 모드를 유지 "*p
하고 "+p
. 일반 모드에서는피레지스터에서 텍스트를 추출하고 전체 텍스트(숨겨진 부분 포함)를 붙여넣습니다. 삽입 모드에서는 동일한 일이 발생하지 않습니다( :set paste
설정된 경우에도).
괄호 붙여넣기 모드
최신 버전의 Vim 지원괄호 붙여넣기 모드이러한 유형의 복사-붙여넣기 공격을 완화합니다. Sato Katsura는 "괄호 안에 붙여넣기에 대한 지원이 Vim 8.0.210에 나타났으며 최근 버전 8.0.303(2017년 2월 2일 출시)에서 수정되었습니다"라고 밝혔습니다.
참고: 내가 아는 한, 브래킷 붙여넣기 모드를 지원하는 Vim 버전이 있습니다.~해야 한다Ctrl- Shift( V대부분의 GNU/Linux 데스크탑 환경), Ctrl- V(MS Windows), Command- V(Mac OS X) 또는 Shift- Insert또는 마우스 가운데 버튼을 클릭하여 붙여넣을 때 사용자를 보호합니다.
시험
나중에 Lubuntu 16.04 데스크톱에서 몇 가지 테스트를 실행했지만 결과는 혼란스럽고 결론이 나지 않았습니다. 나중에 나는 이것이 내가 항상 사용했기 때문이라는 것을 깨달았습니다.GNU 화면그러나 그것은 밝혀졌습니다화면대괄호 붙여넣기 모드를 활성화/비활성화하는 데 사용되는 이스케이프 시퀀스를 필터링합니다(수리하다하지만 프로젝트가 적극적으로 유지 관리되지 않는 시기에 커밋된 것으로 보입니다.) 내 테스트에서는 Vim이나 터미널 에뮬레이터가 대괄호 붙여넣기 모드를 지원하는지 여부에 관계없이 GNU 화면을 통해 Vim을 실행할 때 개념 증명이 항상 작동했습니다.
추가 테스트가 유용할 수 있지만 지금까지 GNU 화면이 관련 이스케이프 시퀀스를 차단하지 않는 한 대괄호로 묶인 붙여넣기 모드에 대한 터미널 에뮬레이터 지원이 개념 증명을 차단한다는 것을 발견했습니다. 그러나 사용자니닌요 보고서조심스럽게 제작된 이스케이프 시퀀스를 사용하여 대괄호 붙여넣기 모드를 종료할 수 있습니다.
최신 버전의 Vim을 사용하더라도 사용자가 *
삽입 모드에서 ( Ctrl- )를 입력하여 R*레지스터에서 붙여넣으면 개념 증명이 항상 작동합니다 . 이는 입력한 입력과 붙여넣은 입력을 구별할 수 있는 GVim에서도 작동합니다. 이 경우 Vim은 사용자가 레지스터의 내용을 신뢰할 수 있도록 합니다. 그러므로 신뢰할 수 없는 소스에서 붙여넣을 때는 절대로 이 방법을 사용하지 마십시오. (이것은 제가 자주 하는 일이지만 지금은 이 방법을 사용하지 않도록 스스로 훈련하기 시작했습니다.)
관련된 링크들
- 당신이 보는 것은 당신이 복사한 것이 아닙니다.(2009년부터 이 취약점을 처음 언급했을 때 발견했습니다.)
- 클립보드 남용으로부터 자신을 어떻게 보호할 수 있나요?
- vim_dev 메일링 리스트의 최신 토론(2017년 1월)
결론적으로
텍스트를 붙여넣을 때(from +
또는 등록) *
일반 모드를 사용합니다 .
...또는 Emacs를 사용하세요. 좋은 운영체제라고 들었습니다. :)
답변2
X11 클립보드 기능 또는 플랫폼별 이에 상응하는 기능을 사용하고 제공된 터미널 붙여넣기 명령(shift-가운데 버튼 또는 터미널 바로가기 방식) 대신 마우스 지원이 활성화된 가운데 마우스 가운데 클릭 붙여넣기 또는 vim 붙여넣기 명령을 사용하는 경우) 그러면 당신은 아마 안전할 겁니다.
그렇지 않은 경우 대괄호 붙여넣기 모드를 지원하는 터미널 에뮬레이터가 있고 터미널과 vim 모두에서 해당 모드를 활성화했으며 해당 터미널 에뮬레이터가 대괄호 붙여넣기 모드를 종료하는 이스케이프 시퀀스 삽입에 대한 보호를 구현한다면 아마도 다음과 같을 것입니다. 안전한.
그렇지 않은 경우 설명된 공격에 취약할 수 있습니다.여기.