web-dev-qa-db-ja.com

Spamassassin正規表現の本体とヘッダーのチェックが機能しない

Spamassasinでは、フィッシングメールを簡単なルールでスパムとしてマークしようとしています。しかし、残念ながら、それを実際にチェックすることはできません。

基本的に私たちが達成しようとしているのは、メールの送信者がドメイン@ example.orgのnotであるが、偽の表示名で書き込んでいる場合です。

次に例を示します。

From: "Firstname Lastname <[email protected]>" <[email protected]>

そこで、次のSAルールは機能しませんでした)を作成しました

header __FRAUD_HEADER From =~ /.*@(?!example\.org)/i 
body __FRAUD_BODY /".*\@example\.org.*"(?!.*\@example\.org.*$)/i 
meta COMPANY_FRAUD (__FRAUD_HEADER && __KFRAUD_BODY) 
describe COMPANY_FRAUD Fake Sender - Phishing Attempt 
score COMPANY_FRAUD 100

これがうまくいかなかった理由についてのアイデアはありますか?

regex101.comは、正規表現が正しいことを示しています。 Spamassasinもエラーについて不平を言っていません。

編集:私は彼らが送信者を偽造した方法が間違っていたと思います。これは、送信者アドレスを偽造/偽装したと私が思う方法の抜粋です。

# telnet mail.example.org 25
Trying 10.20.30.40...
Connected to mail.example.org.
Escape character is '^]'.
220 mail.example.org ESMTP
EHLO a.mailserver.com
250-mail.example.org
250-PIPELINING
250-SIZE
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:[email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
TO: [email protected]
FROM: "Firstname Lastname" [email protected]
SUBJECT: Something
Spam/Phishing message text goes here
.
250 2.0.0 Ok: queued as 123456789
quit
221 2.0.0 Bye
Connection closed by foreign Host.

提案されたソリューションは機能しました!

3
Daywalker

あなたの元のルール:

header __FRAUD_HEADER From =~ /.*@(?!example\.org)/i 
body __FRAUD_BODY /".*\@example\.org.*"(?!.*\@example\.org.*$)/i 
meta COMPANY_FRAUD (__FRAUD_HEADER && __KFRAUD_BODY) 
describe COMPANY_FRAUD Fake Sender - Phishing Attempt 
score COMPANY_FRAUD 100

いくつかの批評:

  • タイプミスがあります。メタルールは__KFRAUD_BODYではなく__FRAUD_BODYに依存しています
  • それらは本当に高価です。必要がない限り、ルックアラウンドを使用しないようにしてください
  • ルールに自分の名前を付けて、自分のものであることを思い出せるようにすることをお勧めします
  • ボディ正規表現にこれらの二重引用符が本当に必要ですか?それが問題かもしれません
  • それは本当にボディ正規表現であるはずですか?インラインフォワードメタデータを照合しようとしていますか?
  • しきい値が5〜10の間であることを考えると、スコア100は危険なほど高いです。

どうですか:

header __DW_NONFRAUD_HEADER  From:addr =~ /\bexample\.org$/i 
body   __DW_FRAUD_BODY       /"[^"]{0,99}\@example\.org\b[^"]{0,99}"(?!.{0,99}\@example\.org\b)/i 
meta     DW_COMPANY_FRAUD    (!__DW_NONFRAUD_HEADER && __DW_FRAUD_BODY) 
describe DW_COMPANY_FRAUD    Fake Sender - Phishing Attempt 
score    DW_COMPANY_FRAUD    3

最初のチェックを否定し、Fromヘッダーのアドレスのみに制限しました(metaルールの改訂を参照)。また、「myexample.org」や「example.org.in」などの奇妙なものを見つけないように、大量の単語境界(\b)マーカーを配置しました。無制限の範囲は非常に高価であるため、0〜99文字に切り詰め、二重引用符と一致しないようにすることで、先を見過ぎないようにしました。 SpamAssassinはすべての空白を折りたたむので、$も削除しました(行末は思った場所にない場合があります。\bなどを使用することをお勧めします)。

スコア3は非常に高いと思います。それ以外の場合は、SAのブラックリスト機能を検討することをお勧めします。

実際には、SpamAssassinのプラグインが [〜#〜] dkim [〜#〜][〜#〜] spf [〜#〜] 用に正しくインストールおよび構成されていることを確認する必要があります=、および [〜#〜] dmarc [〜#〜] (これは、実行しようとしていることの多くを実装するスプーフィング防止テクノロジです)。 [〜#〜] dnsbl [〜#〜] sおよび RI DNSBL sが適切に構成され、使用している(およびトレーニングしている!) ベイズRazorPyzor のようなサードパーティのファジールックアップは、見逃したスパムをキャッチするのにも役立ちます。

このルールは面倒で費用がかかり、拡張性がないため(ドメインごとに作成する必要があります)、ほとんどの場合、効果的ではないように見えるため(ターゲットの「署名」はそれほどスパムではなく、あなたは誤検知が発生します)。

4
Adam Katz