それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

certbotがOCSPが参照できないエラー(malware判定の謗り)

certbotの更新がエラーになってて、エラーアラートが出て、調べたらOCSPが参照できてなかった。

LetsEncryptのOCSPがブロックされる

調べてみると、他の方でも同様のエラーが発生しており。r3.o.lencr.org の名前解決やr3.o.lencr.orgへの接続がブロックされることがある模様。

LetsEncryptでも、Why is my computer fetching this data? Is it malicious? (これはマルウェアをダウンロードしているのですか?)という質問に対して「決してそんなことはない」と掲載している。

certbotのエラー

r3.o.lencr.org に接続しようとしてエラーになっていた。r3.o.lencr.orgはOCSPを提供するアドレス。

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 234, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "/usr/lib/python3.9/http/client.py", line 1255, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.9/http/client.py", line 1301, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.9/http/client.py", line 1250, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.9/http/client.py", line 1010, in _send_output
    self.send(msg)
  File "/usr/lib/python3.9/http/client.py", line 950, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 200, in connect
    conn = self._new_conn()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 181, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f3b524a2cd0>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 574, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='r3.o.lencr.org', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f3b524a2cd0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

なぜブロックされるのか。

これは、個人的な予想だが、「マルウェアがLEの証明書を使って暗号化通信」をしていたために、r3.o.lencr.orgOCSP問合わせがマルウェア由来通信として認知され、どこかのフィルタに登録されてしまう。さらに、それがコピーされ、またコピーされる。そして今にいたり、r3.o.lencr.orgマルウェア配布URLリストに含まれてしまったのだろう。気づいたときには手遅れで、lencr.orgはマルウェア配布URL、またはC&C(コントロール and コマンド)サーバーとして認知されてしまっているのだろう。と予想している。

LetsEncryptの証明書は「信用できない」などという、証明書事業者の間違った言説や解説サイト、これ後押ししているのかもしれない。

証明書が信用できる仕組みで運営されているのと、証明書の所有者が信用できないのは別の話なのにね。

280blocker のリストでも

我が家でも280blocker のリストにr3.o.lencr.org が含まれてしまっていた(2023-05以降)。これによるDNSブロッキングが発動して、certbotOCSPを取得できないというエラーが発生した。

マルウェア対策って。。

結局のところ、ほとんどの人がコピペなんですよね。X509失効リストのような重要なドメインですら、いちどマルウェア判定されるとこのようにコピペで思わぬ弊害を引き起こす。仕方ないこととはいえ、マルウェアがコピペで増殖するように、「間違ったマルウェア対策」もコピペで増殖するんですよね。