Skip to content

Commit e74c35a

Browse files
authored
kern: support openssl 3.3.* (#575)
Add the offset of the `ssl_st->server` field to determine whether the current *SSL is in server mode. Signed-off-by: CFC4N <[email protected]>
1 parent 253bea3 commit e74c35a

18 files changed

+131
-13
lines changed

kern/openssl_1_0_2a_kern.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x14
2427

kern/openssl_1_1_0a_kern.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x8
2427

kern/openssl_1_1_1a_kern.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x50
2427

kern/openssl_1_1_1b_kern.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x50
2427

kern/openssl_1_1_1d_kern.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x50
2427

kern/openssl_1_1_1j_kern.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#ifndef ECAPTURE_OPENSSL_1_1_1_J_KERN_H
22
#define ECAPTURE_OPENSSL_1_1_1_J_KERN_H
33

4-
/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1u 30 May 2023 */
5-
/* OPENSSL_VERSION_NUMBER: 269488479 */
4+
/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1w 11 Sep 2023 */
5+
/* OPENSSL_VERSION_NUMBER: 269488511 */
66

77
// ssl_st->version
88
#define SSL_ST_VERSION 0x0
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x50
2427

kern/openssl_3_0_0_kern.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#ifndef ECAPTURE_OPENSSL_3_0_0_KERN_H
2-
#define ECAPTURE_OPENSSL_3_0_0_KERN_H
1+
#ifndef ECAPTURE_OPENSSL_3_0_6_KERN_H
2+
#define ECAPTURE_OPENSSL_3_0_6_KERN_H
33

4-
/* OPENSSL_VERSION_TEXT: OpenSSL 3.0.9 30 May 2023 */
5-
/* OPENSSL_VERSION_NUMBER: 805306512 */
4+
/* OPENSSL_VERSION_TEXT: OpenSSL 3.1.6 4 Jun 2024 */
5+
/* OPENSSL_VERSION_NUMBER: 806355040 */
66

77
// ssl_st->version
88
#define SSL_ST_VERSION 0x0
@@ -19,6 +19,9 @@
1919
// ssl_st->wbio
2020
#define SSL_ST_WBIO 0x18
2121

22+
// ssl_st->server
23+
#define SSL_ST_SERVER 0x38
24+
2225
// ssl_session_st->master_key
2326
#define SSL_SESSION_ST_MASTER_KEY 0x50
2427

kern/openssl_3_2_0_kern.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#ifndef ECAPTURE_OPENSSL_3_2_0_KERN_H
2-
#define ECAPTURE_OPENSSL_3_2_0_KERN_H
1+
#ifndef ECAPTURE_OPENSSL_3_2_2_KERN_H
2+
#define ECAPTURE_OPENSSL_3_2_2_KERN_H
33

4-
/* OPENSSL_VERSION_TEXT: OpenSSL 3.2.0 23 Nov 2023 */
5-
/* OPENSSL_VERSION_NUMBER: 807403520 */
4+
/* OPENSSL_VERSION_TEXT: OpenSSL 3.2.2 4 Jun 2024 */
5+
/* OPENSSL_VERSION_NUMBER: 807403552 */
66

77
// ssl_st->type
88
#define SSL_ST_TYPE 0x0
@@ -22,6 +22,9 @@
2222
// ssl_connection_st->wbio
2323
#define SSL_CONNECTION_ST_WBIO 0x50
2424

25+
// ssl_connection_st->server
26+
#define SSL_CONNECTION_ST_SERVER 0x70
27+
2528
// ssl_session_st->master_key
2629
#define SSL_SESSION_ST_MASTER_KEY 0x50
2730

user/module/probe_openssl_lib.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const (
3030
Linuxdefaulefilename30 = "linux_default_3_0"
3131
Linuxdefaulefilename31 = "linux_default_3_0"
3232
Linuxdefaulefilename320 = "linux_default_3_2"
33+
Linuxdefaulefilename330 = "linux_default_3_3"
3334
AndroidDefauleFilename = "android_default"
3435

3536
OpenSslVersionLen = 30 // openssl version string length
@@ -39,9 +40,10 @@ const (
3940
MaxSupportedOpenSSL102Version = 'u'
4041
MaxSupportedOpenSSL110Version = 'l'
4142
MaxSupportedOpenSSL111Version = 'w'
42-
MaxSupportedOpenSSL30Version = 13
43-
MaxSupportedOpenSSL31Version = 5
44-
MaxSupportedOpenSSL32Version = 1
43+
MaxSupportedOpenSSL30Version = 14
44+
MaxSupportedOpenSSL31Version = 6
45+
MaxSupportedOpenSSL32Version = 2
46+
MaxSupportedOpenSSL33Version = 1
4547
)
4648

4749
// initOpensslOffset initial BpfMap
@@ -109,6 +111,12 @@ func (m *MOpenSSLProbe) initOpensslOffset() {
109111
m.sslVersionBpfMap[fmt.Sprintf("openssl 3.2.%d", ch)] = "openssl_3_2_0_kern.o"
110112
}
111113

114+
// openssl 3.3.0
115+
for ch := 0; ch <= MaxSupportedOpenSSL33Version; ch++ {
116+
// The OpenSSL 3.3.* series is the same as the 3.2.* series of offsets
117+
m.sslVersionBpfMap[fmt.Sprintf("openssl 3.3.%d", ch)] = "openssl_3_2_0_kern.o"
118+
}
119+
112120
// openssl 1.1.0a - 1.1.0l
113121
for ch := 'a'; ch <= MaxSupportedOpenSSL110Version; ch++ {
114122
m.sslVersionBpfMap["openssl 1.1.0"+string(ch)] = "openssl_1_1_0a_kern.o"

utils/openssl_1_0_2_offset.c

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
X(ssl_st, s3) \
1111
X(ssl_st, rbio) \
1212
X(ssl_st, wbio) \
13+
X(ssl_st, server) \
1314
X(ssl_session_st, master_key) \
1415
X(ssl3_state_st, client_random) \
1516
X(ssl_session_st, cipher) \

utils/openssl_1_1_0_offset.c

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
X(ssl_st, s3) \
1212
X(ssl_st, rbio) \
1313
X(ssl_st, wbio) \
14+
X(ssl_st, server) \
1415
X(ssl_session_st, master_key) \
1516
X(ssl3_state_st, client_random) \
1617
X(ssl_session_st, cipher) \

utils/openssl_1_1_1_offset.c

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
X(ssl_st, s3) \
2222
X(ssl_st, rbio) \
2323
X(ssl_st, wbio) \
24+
X(ssl_st, server) \
2425
X(ssl_session_st, master_key) \
2526
X(ssl3_state_st, client_random) \
2627
X(ssl_session_st, cipher) \

utils/openssl_3_0_offset.c

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
X(ssl_st, s3) \
1212
X(ssl_st, rbio) \
1313
X(ssl_st, wbio) \
14+
X(ssl_st, server) \
1415
X(ssl_session_st, master_key) \
1516
X(ssl_st, s3.client_random) \
1617
X(ssl_session_st, cipher) \

utils/openssl_3_2_0_offset.c

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
X(ssl_connection_st, s3) \
1313
X(ssl_connection_st, rbio) \
1414
X(ssl_connection_st, wbio) \
15+
X(ssl_connection_st, server) \
1516
X(ssl_session_st, master_key) \
1617
X(ssl_connection_st, s3.client_random) \
1718
X(ssl_session_st, cipher) \

utils/openssl_offset_3.0.sh

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ function run() {
3939
sslVerMap["11"]="0"
4040
sslVerMap["12"]="0"
4141
sslVerMap["13"]="0"
42+
sslVerMap["14"]="0"
4243

4344
# shellcheck disable=SC2068
4445
for ver in ${!sslVerMap[@]}; do

utils/openssl_offset_3.1.sh

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ function run() {
3131
sslVerMap["3"]="0"
3232
sslVerMap["4"]="0"
3333
sslVerMap["5"]="0"
34+
sslVerMap["6"]="0"
3435

3536
# shellcheck disable=SC2068
3637
for ver in ${!sslVerMap[@]}; do

utils/openssl_offset_3.2.sh

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function run() {
2727
declare -A sslVerMap=()
2828
sslVerMap["0"]="0"
2929
sslVerMap["1"]="0"
30+
sslVerMap["2"]="0"
3031

3132
# shellcheck disable=SC2068
3233
for ver in ${!sslVerMap[@]}; do

utils/openssl_offset_3.3.sh

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
PROJECT_ROOT_DIR=$(pwd)
5+
OPENSSL_DIR="${PROJECT_ROOT_DIR}/deps/openssl"
6+
OUTPUT_DIR="${PROJECT_ROOT_DIR}/kern"
7+
8+
if [[ ! -f "go.mod" ]]; then
9+
echo "Run the script from the project root directory"
10+
exit 1
11+
fi
12+
13+
echo "check file exists: ${OPENSSL_DIR}/.git"
14+
# skip cloning if the header file of the max supported version is already generated
15+
if [[ ! -f "${OPENSSL_DIR}/.git" ]]; then
16+
echo "check directory exists: ${OPENSSL_DIR}"
17+
# skip cloning if the openssl directory already exists
18+
if [[ ! -d "${OPENSSL_DIR}" ]]; then
19+
echo "git clone openssl to ${OPENSSL_DIR}"
20+
git clone https://github.com/openssl/openssl.git ${OPENSSL_DIR}
21+
fi
22+
fi
23+
24+
# openssl 3.3.* 跟 3.2.* 的offset一致,故这里采用 3.2的文件名。
25+
function run() {
26+
git fetch --tags
27+
cp -f ${PROJECT_ROOT_DIR}/utils/openssl_3_2_0_offset.c ${OPENSSL_DIR}/offset.c
28+
declare -A sslVerMap=()
29+
sslVerMap["0"]="0"
30+
sslVerMap["1"]="1"
31+
32+
# shellcheck disable=SC2068
33+
for ver in ${!sslVerMap[@]}; do
34+
tag="openssl-3.3.${ver}"
35+
val=${sslVerMap[$ver]}
36+
header_file="${OUTPUT_DIR}/openssl_3_2_${val}_kern.c"
37+
header_define="OPENSSL_3_2_$(echo ${val} | tr "[:lower:]" "[:upper:]")_KERN_H"
38+
39+
if [[ -f ${header_file} ]]; then
40+
echo "Skip ${header_file}"
41+
continue
42+
fi
43+
echo "git checkout ${tag}"
44+
git checkout ${tag}
45+
echo "Generating ${header_file}"
46+
47+
48+
# ./Configure and make openssl/opensslconf.h
49+
./Configure
50+
make clean
51+
make build_generated
52+
53+
54+
clang -I include/ -I . offset.c -o offset
55+
56+
echo -e "#ifndef ECAPTURE_${header_define}" >${header_file}
57+
echo -e "#define ECAPTURE_${header_define}\n" >>${header_file}
58+
./offset >>${header_file}
59+
echo -e "#define SSL_ST_VERSION SSL_CONNECTION_ST_VERSION\n" >>${header_file}
60+
echo -e "#define SSL_ST_WBIO SSL_CONNECTION_ST_WBIO\n" >>${header_file}
61+
echo -e "#define SSL_ST_RBIO SSL_CONNECTION_ST_RBIO\n" >>${header_file}
62+
echo -e "\n#include \"openssl.h\"" >>${header_file}
63+
echo -e "#include \"openssl_masterkey_3.3.h\"" >>${header_file}
64+
echo -e "\n#endif" >>${header_file}
65+
66+
# clean up
67+
make clean
68+
69+
done
70+
71+
rm offset.c
72+
}
73+
74+
# TODO Check if the directory for OpenSSL exists
75+
pushd ${OPENSSL_DIR}
76+
(run)
77+
[[ "$?" != 0 ]] && popd
78+
popd

0 commit comments

Comments
 (0)