追加読書

追加読書

テスト目的で、新しいプライマリLinuxサーバー(この場合はCentOS)を設定しました。ファイアウォールなしでPython Webアプリケーションを実行しています。基本的に何かを入力し、python run.pyアプリケーションを前面にインポートし、アプリケーション自体は任意のポート(たとえば)で実行されている8080ため、私が使用しているWebブラウザでは単に何かを入力し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ビット文字セットの2つの切り替え可能な部分を実装します。さまざまな標準制御文字とエスケープシーケンスは、指定された4つの文字セット(「G0」、「G1」、「G2」、および「G3」と呼ばれる)の間でこれら2つの文字セットを切り替えます。これらの4つの文字は、追加のエスケープシーケンスを介して実際の文字セットにマップされます。

出力を破壊する可能性がある一連のバイトシーケンスはかなり大きいです。だけでなく、質問のコメントによると信じるでしょう。持つ4つ2つの取り外し可能領域の移動が可能で、ロックと単一のシフトも可能です。移動のためのC1制御文字には2つの表現があります。これにより、4つのシフトジョブのそれぞれに、200個未満の可能なマッピングされた文字セットがあり、それぞれ独自のエスケープシーケンスがあります。

これは非常に複雑なシステムです。そして、今の時点で「単にUnicodeを使用する方が良いのではないでしょうか?」と思うなら、あなたは最初のものではありません。発明者は、mosh端末エミュレータが文字セット遷移を実装しないことを販売ポイントとした。私も同じだconsole-terminal-emulator。私たちの端末エミュレータは、このような困難を全く経験しません。 1999年以来、Markus KuhnはISO 2022文字セット変換の放棄を奨励してきました。

追加読書

おすすめ記事