Производитель маршрутизаторов и другого оборудования D-Link случайно опубликовал секретные ключи шифрования сертификатов для подписи программного обеспечения, в том числе прошивок устройств.

Пользователь под ником bartvbl приобрел камеру видеонаблюдения D-Link DCS-5020L и скачал обновление прошивки. Данный софт выпускается под свободной лицензией GPL, что дает возможность изучения исходного кода. Пользователь изучил код прошивки для своего устройства и обнаружил в нем четыре «зашитых» ключа шифрования для создания подписи. Некоторые файлы прошивки содержали сами ключи для подписи кода, а в некоторых даже были скрипты с необходимыми командами и паролями.



Кроме того, исследователю удалось сгенерировать цифровую подпись для файла, который не имел отношения к продуктам D-Link.

Как пишет Threatpost, наличие проблемы подтвердил и исследователь Йонатан Клийнсма (Yonathan Klijnsma) из голландской компании Fox-IT.

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

Срок действия ключей истек в сентябре, однако, по словам исследователя, любой софт, который был подписан с их помощью ранее будет восприниматься различными системами в качестве легитимного релиза D-Link. В частности, подписанный с помощью таких ключей софт принимается Microsoft Windows и OS X, говорит Клийнсма. Он также отправил ключи в компанию Symantec, которая осуществляла валидацию ключей D-Link, однако неизвестно, как скоро ключи будут отозваны.

D-Link выпустила новую версию прошивки, из которого удалена информация о ключах для создания цифровых подписей.

По состоянию на 22 сентября ключ D-Link для создания подписи не был отозван. Пользователь Stack Exchange провел эксперимент и создал файл с помощью ключа, который был опубликован на скриншоте в статье на ресурсе Tweakers.net

$ openssl x509 -in 0.dlink.cer -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            50:67:33:96:14:c5:cc:21:9c:48:9d:40:42:0f:3b:f9
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=Terms of use at https://www.verisign.com/rpa (c)10, CN=VeriSign Class 3 Code Signing 2010 CA
        Validity
            Not Before: Jul  5 00:00:00 2012 GMT
            Not After : Sep  3 23:59:59 2015 GMT
        Subject: C=TW, ST=Taipei, L=TAIPEI CITY, O=D-LINK CORPORATION, OU=Digital ID Class 3 - Microsoft Software Validation v2, CN=D-LINK CORPORATION
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:e2:d5:cc:02:33:47:16:ea:79:bc:51:39:ae:c3:
                    f6:96:f6:43:73:68:6c:35:83:58:63:f6:46:d8:56:
                    48:df:48:fd:bd:b0:a6:0c:59:10:20:89:c0:cc:73:
                    59:2f:8c:1a:5a:fc:15:b7:b8:de:cc:4e:1b:3f:50:
                    4c:98:bb:53:33:fc:7b:13:15:b1:b5:c0:5d:97:95:
                    81:ab:9c:2d:0a:3c:e5:14:0d:03:3d:cd:6e:43:9c:
                    0a:75:04:00:b8:50:32:12:ba:9e:6f:ac:fe:93:c7:
                    93:53:c9:98:29:71:dc:85:fc:23:ef:8c:4a:6a:e7:
                    b9:c7:47:af:58:73:cb:29:e1:3b:ac:c9:55:71:89:
                    4c:d6:0a:7c:70:dc:bc:cb:f0:b4:dd:25:ec:72:96:
                    86:36:86:09:1c:c7:ba:5f:a4:37:2d:42:f0:ae:00:
                    fb:5d:97:52:ed:c6:e0:d5:bd:2f:71:fe:98:f6:b4:
                    40:d1:67:61:0a:41:ce:a2:32:6d:ce:90:d9:5f:09:
                    df:b3:c8:f9:8c:da:33:89:42:8d:72:1e:a2:39:c7:
                    2a:2d:b0:a3:91:aa:8a:e9:a9:e6:ab:24:7b:62:d2:
                    9b:35:22:0f:46:1c:87:8b:af:e1:19:98:b4:bd:cf:
                    6d:4c:c4:04:7f:cf:a1:dd:47:71:d8:fb:eb:33:3e:
                    09:d9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://csc3-2010-crl.verisign.com/CSC3-2010.crl

            X509v3 Certificate Policies: 
                Policy: 2.16.840.1.113733.1.7.23.3
                  CPS: https://www.verisign.com/rpa

            X509v3 Extended Key Usage: 
                Code Signing
            Authority Information Access: 
                OCSP - URI:http://ocsp.verisign.com
                CA Issuers - URI:http://csc3-2010-aia.verisign.com/CSC3-2010.cer

            X509v3 Authority Key Identifier: 
                keyid:CF:99:A9:EA:7B:26:F4:4B:C9:8E:8F:D7:F0:05:26:EF:E3:D2:A7:9D

            Netscape Cert Type: 
                Object Signing
            1.3.6.1.4.1.311.2.1.27: 
                0.......
    Signature Algorithm: sha1WithRSAEncryption
         eb:4e:60:57:88:d5:ce:77:a1:94:32:9b:68:fd:3c:23:c4:06:
         fc:43:2e:d6:66:8c:9d:6d:7a:03:07:fb:7b:66:24:3b:30:99:
         9b:d1:3d:66:a9:ca:95:f0:e3:1c:e0:6b:45:03:51:f4:64:15:
         e8:8e:7a:98:17:8c:c0:95:56:58:55:54:ae:54:5d:8f:e2:65:
         0e:cd:79:17:87:0e:8a:2e:40:de:2e:1c:35:5b:6e:ea:23:5a:
         4d:70:8e:1d:05:c0:04:d6:2d:c1:26:80:cf:0f:f8:b6:84:4c:
         eb:82:44:c4:03:f0:65:9e:33:43:f0:e7:39:73:30:be:51:11:
         e8:70:b3:c3:48:77:fd:d2:e0:8f:fe:dd:89:27:b5:b0:31:ac:
         57:63:9d:29:68:9d:2a:8e:e4:d0:dd:5e:d0:6d:f3:bf:63:4d:
         fa:76:ff:f8:ad:a8:29:c9:90:32:f4:31:22:32:b8:67:92:00:
         15:3f:ae:cd:27:71:c2:01:80:24:52:09:6c:14:63:0b:c0:b6:
         69:16:5c:d4:34:a4:40:b0:c6:b6:c3:90:ef:64:fc:a8:b2:eb:
         d8:57:68:43:47:21:55:88:2b:f3:f8:e7:84:52:75:17:73:0c:
         8f:86:f7:b1:ea:66:4e:c5:47:7c:27:13:d0:f4:c7:c6:8a:8a:
         f0:df:d9:a5

Затем этот файл был залит на VirusTotal и успешно прошел проверку.



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

Масштабные атаки с помощью зловредного софта, подписанного украденными сертификатами — не такое редкое явление. К примеру, для атаки на Sony Pictures Entertainment использовался зловред Destover wiper, который был подписан с помощью сертификата, украденного у Sony.

Похожую тактику использовали и хакеры, стоявшие за APT-атакой Duqu 2.0 — они использовался для подписи своего софта сертификат, украденный у китайской технологической компании Foxconn, которая производит устройства Apple, Blackberry, Dell и других известных вендоров.

Комментарии (8)


  1. kay
    23.09.2015 16:53

    Удивительно, что key usage всего лишь один «Digital Signature» )


  1. DimaSmirnov
    23.09.2015 18:34
    -5

    в корбине был фейк хороший, объём памяти коммутатора не смог на определённый релиз вместить 2 прошивки, обнова превысила общий объём, Ваня ( один из главных сейлов ) набирает руководителю саппорта корбины ( упал целый район Москвы после автоматического вката обновы ), говорит «Привет», в ответ «Пока» =)


  1. datacompboy
    23.09.2015 18:40
    +13

    Любая криптография легко разобьётся о человеческий фактор.


  1. QtRoS
    23.09.2015 18:41

    Какая особа разница, все равно большинство юзеров с заводскими дырявыми прошивками…


  1. navion
    23.09.2015 23:41

    Не совсем понятно почему файл проходит проверку, ведь он подписан истёкшим сертификатом уже после этого и валидный таймстамп тут не получить.

    А для защиты хватило бы записи ключа на токен с запретом экспорта.


    1. navion
      23.09.2015 23:51

      Пардон, проверку будут проходить файлы, подписанные до истечения срока действия сертификата (12:59 AM 9/4/2015). А чувак на StackOverflow просто нашел один из них и удивился, что подпись ещё валидна.


      1. motienko
        24.09.2015 09:42
        +2

        т.е. можно поставить дату в системе на полгода назад и получить валидную подпись?


        1. navion
          24.09.2015 12:03
          +1

          Как раз наоборот: чтобы подпись проходила проверку после истечения сертификата, файл должен содержать подпись timestamp-сервера. Если это сделано до истечения, то будет проходить проверку, если после — не будет.