추가 읽기

추가 읽기

테스트 목적으로 새로운 기본 Linux 서버(이 경우 CentOS)를 설정했습니다. 방화벽 없이 Python 웹 애플리케이션을 실행하고 있습니다. 기본적으로 뭔가를 입력 python run.py하고 애플리케이션을 전면으로 가져오고, 애플리케이션 자체는 어떤 포트(예: )에서 실행되고 있기 8080때문에 제가 사용하고 있는 웹 브라우저에서는 그냥 뭔가를 입력 my_public_ip_addr:8080하고 정상적으로 사용합니다. 이 모든 작업은 내 노트북의 SSH를 통해 수행됩니다.

이제 잠시 동안 노트북을 열어 두었고 돌아 왔을 때 셸에는 다음과 같은 내용이 표시되었습니다.

83.20.238.86 - - [13/Mar/2019 08:54:43] "GET / HTTP/1.1" 200 -
87.122.83.97 - - [13/Mar/2019 11:55:30] "GET / HTTP/1.1" 200 -
176.32.33.145 - - [13/Mar/2019 12:08:36] "GET / HTTP/1.1" 200 -
176.32.33.145 - - [13/Mar/2019 12:08:36] code 400, message Bad request syntax ('\x16\x03\x01\x00\xfc\x01\x00\x00\xf8\x03\x03(\xd3FM\xf5\x0eLo\x17\xa3|\x1f8\xca~#\x07\xc1\x1f&&\x14\x19\x11\x10:\x824\xd23nA\x00\x00\x8c\xc00\xc0,\xc02\xc0.\xc0/\xc0+\xc01\xc0-\x00\xa5\x00\xa3\x00\xa1\x00\x9f\x00\xa4\x00\xa2\x00\xa0\x00\x9e\xc0(\xc0$\xc0\x14\xc0')
176.32.33.145 - - [13/Mar/2019 12:08:36] "��(M�L⎺�≠8#�&&:�4┼A��▮�←�2�↓�/�→�1�↑���������(�$��" 4▮▮ ↑
176↓32↓33↓145 ↑ ↑ [13/M▒⎼/2▮19 14:55:55] "GET / HTTP/1↓1" 2▮▮ ↑
176↓32↓33↓145 ↑ ↑ [13/M▒⎼/2▮19 14:55:55] c⎺de 4▮▮← └e⎽⎽▒±e B▒d ⎼e─┤e⎽├ ⎽≤┼├▒│ ('\│16\│▮3\│▮1\│▮▮\│°c\│▮1\│▮▮\│▮▮\│°8\│▮3\│▮3\│92\│8e\│°7\│9e\│1▒\│▒2\│1e\│°8\│°bb^\│1b\│d1\│▒1\│1e\│d2\│d1^\│1e/└\│96_(\│beU\│▮4\│8d≥\│d7⎻\│°e\│▮▮\│▮▮\│8c\│c▮▮\│c▮←\│c▮2\│c▮↓\│c▮/\│c▮→\│c▮1\│c▮↑\│▮▮\│▒5\│▮▮\│▒3\│▮▮\│▒1\│▮▮\│9°\│▮▮\│▒4\│▮▮\│▒2\│▮▮\│▒▮\│▮▮\│9e\│c▮(\│c▮$\│c▮\│14\│c▮')
176↓32↓33↓145 ↑ ↑ [13/M▒⎼/2▮19 14:55:55] "���������b^[⎺⎼▒┼±e@ce┼├⎺⎽↑⎺⎼▒┼±e ⎺⎼▒┼±e_±c]$ ^C
[⎺⎼▒┼±e@ce┼├⎺⎽↑⎺⎼▒┼±e ⎺⎼▒┼±e_±c]$ ┌⎺±⎺┤├
C⎺┼┼ec├☃⎺┼ ├⎺ 1▮4↓248↓36↓8 c┌⎺⎽ed↓
▒d▒└@±⎽:·$ 
▒d▒└@±⎽:·$ 
▒d▒└@±⎽:·$ 
▒d▒└@±⎽:·$ ec▒⎺ '▒e┌┌⎺ ⎽├▒c┐ ⎺┴e⎼°┌⎺┬'
▒e┌┌⎺ ⎽├▒c┐ ⎺┴e⎼°┌⎺┬
▒d▒└@±⎽:·$ 

마지막 3개의 "정상" GET 요청을 볼 수 있지만 /그런 다음 시작됩니다. 나는 그것이 고칠 수 있다는 것을 알고 있습니다 (링크 1또는링크 2) 이것들은 스캐닝 로봇이지만 내 질문은 다음과 같습니다.

어떻게 작동하나요? 들어오는 요청이 내 터미널에 충돌을 일으키나요?

답변1

이것이 안전에 대한 교훈이 되도록 하십시오. 프로그램은 네트워크에서 제공한 입력을 있는 그대로 로그에 직접 덤프합니다. 로그 출력을 사용자 터미널에 직접 덤프합니다. 인터넷상의 공격자가 터미널의 출력을 제어하도록 허용합니다.

cyclogmultilog내가 했던 것처럼 및 또는 유사한 방법을 통해 로그를 전송합니다.https://unix.stackexchange.com/a/505854/5132, 엄격히 제한된 크기의 세트로 이동하여 터미널 대신 로그 파일을 자동으로 회전시킵니다. 그런 다음 제어 문자를 삭제할 수 있는 도구를 사용하여 이러한 로그 파일을 읽습니다.

여기서 "잘못된 문자"는 잘 알려져 있으며 큰 문자 집합 레지스트리와 함께 ECMA-35(ISO/IEC 2022라고도 함)에 의해 표준화되었습니다. 터미널 에뮬레이터는 "GL" 및 "GR"이라는 8비트 문자 집합의 전환 가능한 두 부분을 구현합니다. 다양한 표준 제어 문자와 이스케이프 시퀀스는 지정된 4개의 문자 세트("G0", "G1", "G2" 및 "G3"라고 함) 간에 이 두 문자 세트를 전환합니다. 이 4개의 문자는 추가 이스케이프 시퀀스를 통해 실제 문자 세트에 매핑됩니다.

출력을 손상시킬 수 있는 바이트 시퀀스 집합은 상당히 큽니다. 뿐만 아니라 질문 의견에 따르면 믿게 될 것입니다. 가지다4개두 개의 제거 가능한 영역의 이동이 가능하며 잠금 및 단일 교대도 가능합니다. 이동을 위한 C1 제어 문자에는 두 가지 표현이 있습니다. 그러면 4개의 교대 근무 각각에는 200개 미만의 가능한 매핑된 문자 집합이 있고 각각 고유한 이스케이프 시퀀스가 ​​있습니다.

이것은 매우 복잡한 시스템입니다. 그리고 지금 시점에서 "그냥 유니코드를 사용하는 것이 더 낫지 않을까?"라고 생각한다면 당신이 첫 번째는 아닐 것입니다. 발명가는 mosh터미널 에뮬레이터가 문자 집합 전환을 구현하지 않는다는 점을 판매 포인트로 삼았습니다. 나도 마찬가지다 console-terminal-emulator. 우리의 터미널 에뮬레이터는 이러한 어려움을 전혀 겪지 않습니다. 1999년부터 Markus Kuhn은 ISO 2022 문자 집합 전환의 포기를 장려해 왔습니다.

추가 읽기

관련 정보