Программисты создают код, а хакеры находят в нем ошибки и пользуются ими. Это уже мейнстрим.
Однако обнаруженная дыра в самом распространенном (open-source) криптографическом пакете OpenSSL потенциально могла привести к хищению данных большинства пользователей интернета, что назвать мейнстримом вряд ли получится.
Событие: https://vk.com/heartbleedbug
Лекторы:
Владислав Свольский - https://vk.com/phone287495
Денис Сапожников - https://vk.com/denisnewtown
Почитать: http://debian-help.ru/
2. #Intro
OpenSSL — криптографический пакет с открытым исходным
кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH,
DSA и сертификаты X.509, подписывать их, формировать. Также
имеется возможность шифрования данных и тестирования SSL/TLS
соединений
08.04.2014 сотрудники The OpenSSL Project выпустили бюллетень
безопасности с сообщением о критической уязвимости CVE-2014-
0160 в популярной криптографической библиотеке OpenSSL (1.0.1 и
1.0.2-beta).
3. #Intro
Уязвимость связана с отсутствием необходимой проверки границ в
одной из процедур расширения Heartbeat (RFC6520) для протокола
TLS/DTLS.
Из-за маленькой ошибки кто угодно может получить доступ к
оперативной памяти компьютеров, чьи коммуникации
«защищены» уязвимой версией OpenSSL. В том числе,
злоумышленник получает доступ к секретным ключам, именам и
паролям пользователей и всему контенту, который должен
передаваться в зашифрованном виде. При этом не остается
никаких следов проникновения в систему.
6. Разбор уязвимости
typedef struct ssl3_record_st
{
int type; /* type of record */
unsigned int length; /* How many bytes available */
unsigned int off; /* read/write offset into 'buf' */
unsigned char *data; /* pointer to the record data */
unsigned char *input; /* where the decode bytes are */
unsigned char *comp; /* only used with decompression -
malloc()ed */
unsigned long epoch; /* epoch number, needed by DTLS1 */
unsigned char seq_num[8]; /* sequence number, needed by
DTLS1 */
} SSL3_RECORD;
Структура,
описывающая записи;
содержит тип, длину и
данные
7. Разбор уязвимости
/* Read type and payload length first */
hbtype = *p++;
n2s(p, payload);
pl = p;
dtls1_process_heartbea
t