Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/ttssh2/ttxssh/ttxssh.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10247 - (show annotations) (download) (as text)
Tue Sep 6 17:07:52 2022 UTC (19 months ago) by doda
File MIME type: text/x-chdr
File size: 11668 byte(s)
KEX の Client Secret を記録できるようにした。

Wireshark でこれを利用して、SSH 通信の復号をできるようにするのが目標。
フォーマットは NSS Key Log Format (*1) を参考に、以下のようにした。

<Label> <space> <ClientCookie> <space> <Secret>

・<Label> は <Secret> が何かの説明
・<ClientCookie> はクライアントが送信する SSH_MSG_KEXINIT の cookie を
  16 進数表記した32バイトのデータ
・<Secret> は <Lable> によって変わる

<Label> は現在のところ以下がある。

・CLIENT_SECRET: DH や ECDH の Client Secret を 16 進表記したもの
・SHARED_SECRET: DH や ECDH で共有された Shared Secret を 16進表記したもの
・EXCHANGE_HASH: 鍵交換の結果得られた Exchange-Hash を 16進表記したもの

現在のところ、CLIENT_SECRET のみ出力するようになっている。
SHARED_SECRET や EXCHANGE_HASH は CLIENT_SECRET と通信内容があれば計算が
出来るので、その計算の手間を省く為の参考情報。

*1: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
1 /*
2 * Copyright (c) 1998-2001, Robert O'Callahan
3 * (C) 2004- TeraTerm Project
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 /*
31 This code is copyright (C) 1998-1999 Robert O'Callahan.
32 See LICENSE.TXT for the license.
33 */
34
35 #ifndef __TTXSSH_H
36 #define __TTXSSH_H
37
38 #pragma warning(3 : 4035)
39
40 /* VS2015(VC14.0)�����AWSASocketA(), inet_ntoa() ������API��deprecated��������
41 * �x�������������A�x�����}�~�����B�����������u���������AVS2005(VC8.0)���r���h
42 * �����������������A�x�����}�~���������������B
43 */
44 #if _MSC_VER >= 1800 // VSC2013(VC12.0) or later
45 #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
46 #define _WINSOCK_DEPRECATED_NO_WARNINGS
47 #endif
48 #endif
49
50 #include <winsock2.h>
51 #include <ws2tcpip.h>
52 #include <wspiapi.h>
53 /* actual body of in6addr_any and in6addr_loopback is disappeared?? */
54 #undef IN6_IS_ADDR_LOOPBACK
55 #define IN6_IS_ADDR_LOOPBACK(a) \
56 ((*(unsigned int *)(&(a)->s6_addr[0]) == 0) && \
57 (*(unsigned int *)(&(a)->s6_addr[4]) == 0) && \
58 (*(unsigned int *)(&(a)->s6_addr[8]) == 0) && \
59 (*(unsigned int *)(&(a)->s6_addr[12]) == ntohl(1)))
60 /* work around for MS Platform SDK Oct 2000 */
61 #include <malloc.h> /* prevent of conflict stdlib.h */
62 #include <stdlib.h>
63 #include <stdarg.h>
64 #include <crtdbg.h>
65
66 #include "i18n.h"
67 #include "ttlib.h"
68
69 typedef struct _TInstVar *PTInstVar;
70
71 #include "ttxssh-version.h"
72 #include "util.h"
73 #include "pkt.h"
74 #include "ssh.h"
75 #include "auth.h"
76 #include "crypt.h"
77 #include "cipher.h"
78 #include "comp.h"
79 #include "kex.h"
80 #include "hostkey.h"
81 #include "key.h"
82 #include "hosts.h"
83 #include "fwd.h"
84
85 #include <openssl/dh.h>
86 #include <openssl/ec.h>
87 #include <openssl/evp.h>
88 #include "buffer.h"
89
90 /* tttypes.h �����`���������� EM �}�N���� openssl/rsa.h (OpenSSL 0.9.8)�������v���g�^�C�v������
91 * �������������d�����������������A�r���h�G���[�������B���L3�w�b�_��include���u�����L�����������B
92 * (2005.7.9 yutaka)
93 */
94 #include "teraterm.h"
95 #include "tttypes.h"
96 #include "ttplugin.h"
97
98 #if defined(_MSC_VER) && !defined(_Printf_format_string_)
99 // ���`�������������������������������������`��������
100 #define _Printf_format_string_
101 #endif
102
103 extern HANDLE hInst; /* Instance handle of TTXSSH.DLL */
104
105 #define ID_SSHSCPMENU 52110
106 #define ID_SSHSETUPMENU 52310
107 #define ID_SSHAUTHSETUPMENU 52320
108 #define ID_SSHFWDSETUPMENU 52330
109 #define ID_SSHKEYGENMENU 52340
110 #define ID_ABOUTMENU 52910
111
112 #define ID_SSHAUTH 62501
113 #define ID_SSHUNKNOWNHOST 62502
114 #define ID_SSHDIFFERENTKEY 62503
115 #define ID_SSHASYNCMESSAGEBOX 62504
116 #define ID_SSHDIFFERENT_TYPE_KEY 62505
117
118 #define OPTION_NONE 0
119 #define OPTION_CLEAR 1
120 #define OPTION_REPLACE 2
121
122 /*
123 * DisablePopupMessage �p���r�b�g���`
124 */
125 #define POPUP_MSG_default 0
126 #define POPUP_MSG_FWD_received_data (1 << 0)
127
128
129 /*
130 * Host key rotation
131 */
132 #define SSH_UPDATE_HOSTKEYS_NO 0
133 #define SSH_UPDATE_HOSTKEYS_YES 1
134 #define SSH_UPDATE_HOSTKEYS_ASK 2
135 #define SSH_UPDATE_HOSTKEYS_MAX 3
136
137 /*
138 * Server compatibility flag
139 */
140 #define SSH_BUG_DHGEX_LARGE 0x00000001
141
142
143 /*
144 These are the fields that WOULD go in Tera Term's 'ts' structure, if
145 we could put them there.
146 */
147 typedef struct _TS_SSH {
148 BOOL Enabled;
149 int CompressionLevel; /* 0 = NONE, else 1-9 */
150
151 int DefaultUserType; /* 0/1/2 = no input/DefaultUserName/Windows logon user */
152 char DefaultUserName[256];
153
154 /* this next option is a string of digits. Each digit represents a
155 cipher. The first digit is the most preferred cipher, and so on.
156 The digit SSH_CIPHER_NONE signifies that any ciphers after it are
157 disabled. */
158 char CipherOrder[SSH_CIPHER_MAX+2];
159
160 char KnownHostsFiles[2048];
161 int DefaultAuthMethod;
162 char DefaultRhostsLocalUserName[256];
163 char DefaultRhostsHostPrivateKeyFile[1024];
164 char DefaultRSAPrivateKeyFile[1024];
165
166 char DefaultForwarding[4096];
167 BOOL TryDefaultAuth;
168
169 int LogLevel; /* 0 = NONE, 100 = Verbose */
170 int WriteBufferSize;
171
172 int ssh_protocol_version; // SSH version (2004.10.11 yutaka)
173 int ssh_heartbeat_overtime; // SSH heartbeat(keepalive) (2004.12.11 yutaka)
174 // whether password will permanently store on heap memory (2006.8.5 yutaka)
175 int remember_password;
176
177 // try auth with "none" method for disable unsupported on dialog (2007.9.24 maya)
178 BOOL CheckAuthListFirst;
179
180 // Enable connection to the server that has RSA key length less than 768 bit (2008.9.11 maya)
181 BOOL EnableRsaShortKeyServer;
182
183 // Enable Agent forwarding
184 BOOL ForwardAgent;
185
186 // Confirm Agent forwarding
187 BOOL ForwardAgentConfirm;
188
189 // Confirm Agent forwarding
190 BOOL ForwardAgentNotify;
191
192 // KEX order(derived from teraterm.ini)
193 char KexOrder[KEX_DH_MAX+1];
194 char HostKeyOrder[KEY_ALGO_MAX+1];
195 char MacOrder[HMAC_MAX+1];
196 char CompOrder[COMP_MAX+1];
197
198 BOOL VerifyHostKeyDNS;
199
200 int IconID;
201
202 int DisablePopupMessage;
203
204 char X11Display[128];
205
206 int UpdateHostkeys;
207
208 int GexMinimalGroupSize;
209
210 int AuthBanner;
211
212 BOOL KexKeyLogging;
213 char KexKeyLogFile[1024];
214 } TS_SSH;
215
216 typedef struct _TInstVar {
217 PTTSet ts;
218 PComVar cv;
219
220 /* shared memory for settings across instances. Basically it's
221 a cache for the INI file.*/
222 TS_SSH *ts_SSH;
223
224 int fatal_error;
225 int showing_err;
226 char *err_msg;
227
228 Tconnect Pconnect;
229 Trecv Precv;
230 Tsend Psend;
231 TWSAAsyncSelect PWSAAsyncSelect;
232 TWSAGetLastError PWSAGetLastError;
233
234 PReadIniFile ReadIniFile;
235 PWriteIniFile WriteIniFile;
236 PParseParam ParseParam;
237
238 HMENU FileMenu;
239
240 SOCKET socket;
241 HWND NotificationWindow;
242 unsigned int notification_msg;
243 long notification_events;
244 HICON OldSmallIcon; // �g�p������
245 HICON OldLargeIcon; // �g�p������
246
247 BOOL hostdlg_activated;
248 BOOL hostdlg_Enabled;
249
250 int protocol_major;
251 int protocol_minor;
252
253 PKTState pkt_state;
254 SSHState ssh_state;
255 AUTHState auth_state;
256 CRYPTState crypt_state;
257 HOSTSState hosts_state;
258 FWDState fwd_state;
259
260 /* The settings applied to the current session. The user may change
261 the settings but usually we don't want that to affect the session
262 in progress (race conditions). So user setup changes usually
263 modify the 'settings' field below. */
264 TS_SSH session_settings;
265
266 /* our copy of the global settings. This is synced up with the shared
267 memory only when we do a ReadIniFile or WriteIniFile
268 (i.e. the user loads or saves setup) */
269 TS_SSH settings;
270
271 // SSH2
272 DH *kexdh;
273 char server_version_string[128];
274 char client_version_string[128];
275 buffer_t *my_kex;
276 buffer_t *peer_kex;
277 kex_algorithm kex_type; // KEX algorithm
278 ssh_keyalgo hostkey_type;
279 const struct ssh2cipher *ciphers[MODE_MAX];
280 const struct SSH2Mac *macs[MODE_MAX];
281 compression_type ctos_compression;
282 compression_type stoc_compression;
283 int we_need;
284 int kex_status;
285 char *session_id;
286 int session_id_len;
287 SSHKeys ssh2_keys[MODE_MAX];
288 struct sshcipher_ctx *cc[MODE_MAX];
289 int userauth_success;
290 int shell_id;
291 int session_nego_status;
292 /*
293 unsigned int local_window;
294 unsigned int local_window_max;
295 unsigned int local_consumed;
296 unsigned int local_maxpacket;
297 unsigned int remote_window;
298 unsigned int remote_maxpacket;
299 */
300 int client_key_bits;
301 int server_key_bits;
302 int kexgex_min;
303 int kexgex_bits;
304 int kexgex_max;
305 int ssh2_autologin;
306 int ask4passwd;
307 SSHAuthMethod ssh2_authmethod;
308 char ssh2_username[MAX_PATH];
309 char ssh2_password[MAX_PATH];
310 char ssh2_keyfile[MAX_PATH];
311 time_t ssh_heartbeat_tick;
312 HANDLE ssh_heartbeat_thread;
313 int keyboard_interactive_password_input;
314 int userauth_retry_count;
315 buffer_t *decomp_buffer;
316 buffer_t *authbanner_buffer;
317 char *ssh2_authlist;
318 BOOL tryed_ssh2_authlist;
319 HWND ssh_hearbeat_dialog;
320
321 /* Pageant �������M�p */
322 unsigned char *pageant_key;
323 unsigned char *pageant_curkey;
324 int pageant_keylistlen;
325 int pageant_keycount;
326 int pageant_keycurrent;
327 BOOL pageant_keyfinal;// SSH2 PK_OK ������������ TRUE ������
328
329 // agent forward
330 BOOL agentfwd_enable;
331
332 BOOL origDisableTCPEchoCR;
333
334 BOOL nocheck_known_hosts;
335
336 EC_KEY *ecdh_client_key;
337
338 int dns_key_check;
339
340 unsigned int server_compat_flag;
341
342 void *hostkey_ctx;
343
344 BOOL use_subsystem;
345 char subsystem_name[256];
346
347 BOOL nosession;
348
349 // dialog resource
350 HFONT hFontFixed; // hosts.c�����_�C�A���O�p
351
352 char *server_sig_algs;
353
354 } TInstVar;
355
356 // �o�[�W���������������������X�������B ��: TTSSH_2-81_TS_data
357 #define TTSSH_FILEMAPNAME "TTSSH_" TTSSH_VERSION_STR("-") "_TS_data"
358
359 #define LOG_LEVEL_FATAL 5
360 #define LOG_LEVEL_ERROR 10
361 #define LOG_LEVEL_WARNING 30
362 #define LOG_LEVEL_NOTICE 50
363 #define LOG_LEVEL_INFO 80
364 #define LOG_LEVEL_VERBOSE 100
365 #define LOG_LEVEL_SSHDUMP 200
366
367 #define SSHv1(pvar) ((pvar)->protocol_major == 1)
368 #define SSHv2(pvar) ((pvar)->protocol_major == 2)
369
370 #define LogLevel(pvar, level) ((pvar)->settings.LogLevel >= (level))
371
372 void notify_established_secure_connection(PTInstVar pvar);
373 void notify_closed_connection(PTInstVar pvar, char *send_msg);
374 void notify_nonfatal_error(PTInstVar pvar, char *msg);
375 void notify_fatal_error(PTInstVar pvar, char *msg, BOOL send_disconnect);
376 void logputs(int level, char *msg);
377 #if defined(_MSC_VER)
378 void logprintf(int level, _Printf_format_string_ const char *fmt, ...);
379 void logprintf_hexdump(int level, const char *data, int len, _Printf_format_string_ const char *fmt, ...);
380 #elif defined(__GNUC__)
381 void logprintf(int level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
382 void logprintf_hexdump(int level, const char *data, int len, const char *fmt, ...) __attribute__ ((format (printf, 4, 5)));
383 #else
384 void logprintf(int level, const char *fmt, ...);
385 void logprintf_hexdump(int level, const char *data, int len, const char *fmt, ...);
386 #endif
387
388 void get_teraterm_dir_relative_name(char *buf, int bufsize, char *basename);
389 wchar_t *get_teraterm_dir_relative_nameW(const wchar_t *basename);
390 int copy_teraterm_dir_relative_path(char *dest, int destsize, char *basename);
391 wchar_t *get_home_dir_relative_nameW(const wchar_t *basename);
392 wchar_t *get_log_dir_relative_nameW(const wchar_t *basename);
393 int uuencode(unsigned char *src, int srclen, unsigned char *target, int targsize);
394
395 #endif

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26