Подмена SSL сертификатов Avast!’ом

в 17:50, , рубрики: Песочница, метки: , ,

Недавно экспериментировал с JavaMail и наткнулся на интересную «особенность» работы Avast! Mail Scanner (сканер). При включенном сканере не удавалось соединиться с SMTP сервером с включенным SSL/TLS, в частности с smtp.yandex.ru:465. Небольшое исследование показало, что эта проблема вызвана проблемой с сертификатом для этого сервера и эта проблема вызвана именно сканером.

При включенном сканере и попытке SSL соединения с smtp.yandex.ru:465 сертификат отдаваемый этим сервисом не проходит проверку. Внимательный взгляд на это сертификат показал, что выдан он «avast! Mail Scanner Root»:

[
  Version: V3
  Subject: EMAILADDRESS=pki@yandex-team.ru, CN=smtp.yandex.ru, ST=Russian Federation, L=Moscow, OU=ITO, O=Yandex LLC, C=RU
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

  Key:  Sun RSA public key, 2048 bits
  modulus: <опущено>
  public exponent: 65537
  Validity: [From: Tue Dec 10 14:22:38 MSK 2013,
               To: Fri Dec 09 14:22:38 MSK 2016]
  Issuer: CN=avast! Mail Scanner Root, O=avast! Mail Scanner, OU=generated by avast! antivirus for SSL scanning
  SerialNumber: [    0104a020]

Certificate Extensions: 8
[1]: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B8 3B 67 E0 33 60 3B 54   68 48 C2 B9 6D 59 43 28  .;g.3`;ThH..mYC(
0010: A5 61 91 7A                                        .a.z
]

При отключении Avast! имеем:

[
  Version: V3
  Subject: EMAILADDRESS=pki@yandex-team.ru, CN=smtp.yandex.ru, ST=Russian Federation, L=Moscow, OU=ITO, O=Yandex LLC, C=RU
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

  Key:  Sun RSA public key, 2048 bits
  modulus: <опущено>
  public exponent: 65537
  Validity: [From: Tue Dec 10 14:22:38 MSK 2013,
               To: Fri Dec 09 14:22:38 MSK 2016]
  Issuer: CN=Certum Level IV CA, OU=Certum Certification Authority, O=Unizeto Technologies S.A., C=PL
  SerialNumber: [    134114dc 3d88f814 806682cc 0ef22bd4]

Certificate Extensions: 10
[1]: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
  [
   accessMethod: ocsp
   accessLocation: URIName: http://ocsp.certum.pl
, 
   accessMethod: caIssuers
   accessLocation: URIName: http://www.certum.pl/l4.cer
]

Соответственно, издатель сертификата валидный и всё работает нормально. Просто Java хранилище сертификатов не содержит доверенного сертификата от Avast! и закономерно ругается.

Вроде бы и понятно, что антивирус пытается сканировать шифрованый трафик, но таким макаром ему не составит никакого труда подписать/подменить и любой левый сертификат и пользователь даже не заметит этого, если пользуется штатными средствами Windows с использованием системного хранилища сертификатов, где авастовский прописывается при установке.

P.S Для просмотра сертификатов использовался InstallCert.java.

Поделиться

* - обязательные к заполнению поля