2019年04月26日

Libevent 2.1.8 で LibreSSL を使うためのパッチ

Libevent 2.1.8LibreSSL を使うには以下のパッチが必要です。
--- ./openssl-compat.h.ORG	2016-12-07 07:13:44.000000000 +0900
+++ ./openssl-compat.h 2018-04-09 23:53:59.600157572 +0900
@@ -30,6 +30,10 @@

#define TLS_method SSLv23_method

+#elif defined(LIBRESSL_VERSION_NUMBER)
+
+#define BIO_get_init(b) (b)->init
+
#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */

#endif /* OPENSSL_COMPAT_H */
ちなみに古い(2.7系以前?)を使う場合は以下のファイル
openssl-compat.h
sample/https-client.c
sample/le-proxy.c
sample/openssl_hostname_validation.c
test/regress_ssl.c
に対して次のような修正が必要です。
元 #if OPENSSL_VERSION_NUMBER < 0x10100000L
新 #if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
posted by yamaga at 10:10| Comment(0) | OpenBSD | このブログの読者になる | 更新情報をチェックする

Netatalk 3.1.12 で LibreSSL 2.7系以降を使うためのパッチ

Netatalk 3.1.12 は LibreSSL に対応しているのですが、LibreSSL 2.7系以降に対しては以下のパッチが必要です。
--- ./etc/uams/openssl_compat.h.ORG     2018-11-29 18:30:45.000000000 +0900
+++ ./etc/uams/openssl_compat.h 2019-04-26 07:40:55.857191351 +0900
@@ -11,7 +11,7 @@
#ifndef OPENSSL_COMPAT_H
#define OPENSSL_COMPAT_H

-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L)
inline static int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
{
/* If the fields p and g in d are NULL, the corresponding input
なお、LibreSSL とは全く関係ないですが、Python3 を使う場合はこの↓パッチをあてたほうが良いです。
--- ./contrib/shell_utils/afpstats.ORG  2014-12-11 20:26:32.000000000 +0900
+++ ./contrib/shell_utils/afpstats 2018-12-25 19:34:54.635154719 +0900
@@ -23,7 +23,7 @@

reply = iface.GetUsers()
for name in reply:
- print name
+ print(name)

if __name__ == '__main__':
main()
posted by yamaga at 07:57| Comment(3) | OpenBSD | このブログの読者になる | 更新情報をチェックする

2019年04月24日

MIT Kerberos5 1.17 で LibreSSL 2.9.1 を使うためのパッチ

LibreSSL 2.9系の最初の安定版となる 2.9.1 がリリースされたのですが、これがちょっと厄介。OpenSSL 1.1系との互換性を向上させたらしいのですが、相変わらず中途半端なので、これまでの
元 #if OPENSSL_VERSION_NUMBER < 0x10100000L
新 #if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)

元 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
新 #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
と言った書き換えだけでは不充分なものもあり、例えば MIT Kerberos ではダメ。

ということで、MIT Kerberos5 1.17 に対する LibreSSL 2.9.1 を使うためのパッチを作ってみました。
diff -ruN ../krb5-1.17.ORG/src/plugins/preauth/pkinit/asn1t_add.h ./src/plugins/preauth/pkinit/asn1t_add.h
--- ../krb5-1.17.ORG/src/plugins/preauth/pkinit/asn1t_add.h 1970-01-01 09:00:00.000000000 +0900
+++ ./src/plugins/preauth/pkinit/asn1t_add.h 2019-04-24 20:09:19.848554267 +0900
@@ -0,0 +1,23 @@
+#ifndef HEADER_ASN1T_ADD_H
+#define HEADER_ASN1T_ADD_H
+#include <openssl/asn1t.h>
+
+# define static_ASN1_ITEM_start(itname) \
+ static const ASN1_ITEM itname##_it = {
+
+# define ASN1_ITEM_end(itname) \
+ };
+
+# define static_ASN1_SEQUENCE_END_name(stname, tname) \
+ ;\
+ static_ASN1_ITEM_start(tname) \
+ ASN1_ITYPE_SEQUENCE,\
+ V_ASN1_SEQUENCE,\
+ tname##_seq_tt,\
+ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
+ NULL,\
+ sizeof(stname),\
+ #stname \
+ ASN1_ITEM_end(tname)
+
+#endif /* HEADER_ASN1T_ADD_H */
diff -ruN ../krb5-1.17.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
--- ../krb5-1.17.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2019-01-09 01:02:37.000000000 +0900
+++ ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2019-04-24 20:14:54.578620209 +0900
@@ -189,7 +189,7 @@
(*_x509_pp) = PKCS7_cert_from_signer_info(_p7,_si)
#endif

-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)

/* 1.1 standardizes constructor and destructor names, renaming
* EVP_MD_CTX_{create,destroy} and deprecating ASN1_STRING_data. */
@@ -3053,7 +3053,7 @@
return retval;
}

-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x20900000L)

/*
* We need to decode DomainParameters from RFC 3279 section 2.3.3. We would
diff -ruN ../krb5-1.17.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.h ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.h
--- ../krb5-1.17.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.h 2019-01-09 01:02:37.000000000 +0900
+++ ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.h 2019-04-24 20:15:42.128629575 +0900
@@ -46,8 +46,11 @@
#include <openssl/asn1.h>
#include <openssl/pem.h>

-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x20900000L)
#include <openssl/asn1t.h>
+# ifdef LIBRESSL_VERSION_NUMBER
+# include "asn1t_add.h"
+# endif
#else
#include <openssl/asn1_mac.h>
#endif
LibreSSL とは全く関係ないですが、他にもこの↓パッチもあてたほうが良い場合もあるかも。
diff -ruN ../krb5-1.17.ORG/src/Makefile.in ./src/Makefile.in
--- ../krb5-1.17.ORG/src/Makefile.in 2019-01-09 01:02:37.000000000 +0900
+++ ./src/Makefile.in 2019-04-24 16:45:55.157416835 +0900
@@ -1,3 +1,4 @@
+localstatedir=@localstatedir@
datadir=@datadir@

mydir=.
posted by yamaga at 23:25| Comment(1) | OpenBSD | このブログの読者になる | 更新情報をチェックする

2019年04月04日

「海の向こうの“セキュリティ”」第151回公開

今月分が公開されました。

サイバー恐喝攻撃のリスクを下げるためのアドバイスとは
SNSを使った米国世論の操作:中国とロシアの違い/ランサムウェアやセクストーションなどの恐喝攻撃の実態
https://internet.watch.impress.co.jp/docs/column/security/1178153.html
posted by yamaga at 06:56| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする