improve audit of server ket management

This commit is contained in:
Jan F 2011-02-17 17:54:23 +01:00
parent b9127ef973
commit 2c1a4adbdd
6 changed files with 190 additions and 192 deletions

View File

@ -1,74 +0,0 @@
diff -up openssh-5.6p1/log.h.wIm openssh-5.6p1/log.h
--- openssh-5.6p1/log.h.wIm 2008-06-13 02:22:54.000000000 +0200
+++ openssh-5.6p1/log.h 2011-01-11 10:35:32.000000000 +0100
@@ -63,6 +63,7 @@ void verbose(const char *, ...) __at
void debug(const char *, ...) __attribute__((format(printf, 1, 2)));
void debug2(const char *, ...) __attribute__((format(printf, 1, 2)));
void debug3(const char *, ...) __attribute__((format(printf, 1, 2)));
+void debug_wIm(const char *);
void do_log(LogLevel, const char *, va_list);
void cleanup_exit(int) __attribute__((noreturn));
diff -up openssh-5.6p1/Makefile.in.wIm openssh-5.6p1/Makefile.in
--- openssh-5.6p1/Makefile.in.wIm 2010-05-12 08:51:39.000000000 +0200
+++ openssh-5.6p1/Makefile.in 2011-01-11 10:35:32.000000000 +0100
@@ -69,7 +69,7 @@ LIBSSH_OBJS=acss.o authfd.o authfile.o b
cipher-bf1.o cipher-ctr.o cipher-3des1.o cleanup.o \
compat.o compress.o crc32.o deattack.o fatal.o hostfile.o \
log.o match.o md-sha256.o moduli.o nchan.o packet.o \
- readpass.o rsa.o ttymodes.o xmalloc.o addrmatch.o \
+ readpass.o rsa.o ttymodes.o whereIam.o xmalloc.o addrmatch.o \
atomicio.o key.o dispatch.o kex.o mac.o uidswap.o uuencode.o misc.o \
monitor_fdpass.o rijndael.o ssh-dss.o ssh-rsa.o dh.o kexdh.o \
kexgex.o kexdhc.o kexgexc.o msg.o progressmeter.o dns.o \
diff -up openssh-5.6p1/sshd.c.wIm openssh-5.6p1/sshd.c
--- openssh-5.6p1/sshd.c.wIm 2010-04-16 07:56:22.000000000 +0200
+++ openssh-5.6p1/sshd.c 2011-01-11 10:35:32.000000000 +0100
@@ -139,6 +139,9 @@ int deny_severity;
extern char *__progname;
+/* trace of fork processes */
+extern int whereIam;
+
/* Server configuration options. */
ServerOptions options;
@@ -652,6 +655,7 @@ privsep_preauth(Authctxt *authctxt)
} else {
/* child */
+ whereIam = 1;
close(pmonitor->m_sendfd);
/* Demote the child */
@@ -693,6 +697,7 @@ privsep_postauth(Authctxt *authctxt)
exit(0);
}
+ whereIam = 2;
close(pmonitor->m_sendfd);
/* Demote the private keys to public keys. */
@@ -1299,6 +1304,8 @@ main(int ac, char **av)
Key *key;
Authctxt *authctxt;
+ whereIam = 0;
+
#ifdef HAVE_SECUREWARE
(void)set_auth_parameters(ac, av);
#endif
diff -up openssh-5.6p1/whereIam.c.wIm openssh-5.6p1/whereIam.c
--- openssh-5.6p1/whereIam.c.wIm 2011-01-11 10:35:32.000000000 +0100
+++ openssh-5.6p1/whereIam.c 2011-01-11 10:35:32.000000000 +0100
@@ -0,0 +1,9 @@
+
+int whereIam = -1;
+
+void debug_wIm(const char *txt)
+{
+ debug("%s: %s wIm = %d, euid=%d", txt, __func__, whereIam, geteuid());
+}
+
+

View File

@ -45,7 +45,7 @@ diff -up openssh-5.8p1/audit-linux.c.audit1 openssh-5.8p1/audit-linux.c
+ "root denied", + "root denied",
+ "success", + "success",
+ "none", + "none",
+ "paasword", + "pasword",
+ "chalenge-response", + "chalenge-response",
+ "pubkey", + "pubkey",
+ "hostbased", + "hostbased",

View File

@ -1,6 +1,6 @@
diff -up openssh-5.8p1/audit-bsm.c.audit3 openssh-5.8p1/audit-bsm.c diff -up openssh-5.8p1/audit-bsm.c.audit3 openssh-5.8p1/audit-bsm.c
--- openssh-5.8p1/audit-bsm.c.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/audit-bsm.c.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/audit-bsm.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/audit-bsm.c 2011-02-17 15:09:38.000000000 +0100
@@ -383,4 +383,16 @@ audit_event(ssh_audit_event_t event) @@ -383,4 +383,16 @@ audit_event(ssh_audit_event_t event)
debug("%s: unhandled event %d", __func__, event); debug("%s: unhandled event %d", __func__, event);
} }
@ -19,18 +19,18 @@ diff -up openssh-5.8p1/audit-bsm.c.audit3 openssh-5.8p1/audit-bsm.c
+} +}
#endif /* BSM */ #endif /* BSM */
diff -up openssh-5.8p1/audit.c.audit3 openssh-5.8p1/audit.c diff -up openssh-5.8p1/audit.c.audit3 openssh-5.8p1/audit.c
--- openssh-5.8p1/audit.c.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/audit.c.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/audit.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/audit.c 2011-02-17 15:10:27.000000000 +0100
@@ -36,6 +36,8 @@ @@ -36,6 +36,8 @@
#include "key.h" #include "key.h"
#include "hostfile.h" #include "hostfile.h"
#include "auth.h" #include "auth.h"
+#include "ssh-gss.h" +#include "ssh-gss.h"
+#include "monitor_wrap.h" +#include "monitor_wrap.h"
#include "xmalloc.h"
/* /*
* Care must be taken when using this since it WILL NOT be initialized when @@ -139,6 +141,18 @@ audit_key(int type, int *rv, const Key *
@@ -138,6 +140,18 @@ audit_key(int type, int *rv, const Key *
xfree(fp); xfree(fp);
} }
@ -49,7 +49,7 @@ diff -up openssh-5.8p1/audit.c.audit3 openssh-5.8p1/audit.c
# ifndef CUSTOM_SSH_AUDIT_EVENTS # ifndef CUSTOM_SSH_AUDIT_EVENTS
/* /*
* Null implementations of audit functions. * Null implementations of audit functions.
@@ -221,5 +235,24 @@ audit_keyusage(int host_user, const char @@ -222,5 +236,24 @@ audit_keyusage(int host_user, const char
debug("audit %s key usage euid %d user %s key type %s key length %d fingerprint %s, result %d", debug("audit %s key usage euid %d user %s key type %s key length %d fingerprint %s, result %d",
host_user ? "hostbased" : "pubkey", geteuid(), audit_username(), type, len, fp, rv); host_user ? "hostbased" : "pubkey", geteuid(), audit_username(), type, len, fp, rv);
} }
@ -75,8 +75,8 @@ diff -up openssh-5.8p1/audit.c.audit3 openssh-5.8p1/audit.c
# endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */ # endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/audit.h.audit3 openssh-5.8p1/audit.h diff -up openssh-5.8p1/audit.h.audit3 openssh-5.8p1/audit.h
--- openssh-5.8p1/audit.h.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/audit.h.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/audit.h 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/audit.h 2011-02-17 15:09:38.000000000 +0100
@@ -56,5 +56,9 @@ void audit_run_command(const char *); @@ -56,5 +56,9 @@ void audit_run_command(const char *);
ssh_audit_event_t audit_classify_auth(const char *); ssh_audit_event_t audit_classify_auth(const char *);
int audit_keyusage(int, const char *, unsigned, char *, int); int audit_keyusage(int, const char *, unsigned, char *, int);
@ -88,8 +88,8 @@ diff -up openssh-5.8p1/audit.h.audit3 openssh-5.8p1/audit.h
#endif /* _SSH_AUDIT_H */ #endif /* _SSH_AUDIT_H */
diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
--- openssh-5.8p1/audit-linux.c.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/audit-linux.c.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/audit-linux.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/audit-linux.c 2011-02-17 15:09:38.000000000 +0100
@@ -36,6 +36,8 @@ @@ -36,6 +36,8 @@
#include "log.h" #include "log.h"
#include "audit.h" #include "audit.h"
@ -99,7 +99,7 @@ diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
#define AUDIT_LOG_SIZE 128 #define AUDIT_LOG_SIZE 128
@@ -156,4 +158,54 @@ audit_event(ssh_audit_event_t event) @@ -223,4 +225,54 @@ audit_event(ssh_audit_event_t event)
} }
} }
@ -109,17 +109,17 @@ diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
+#ifdef AUDIT_CRYPTO_SESSION +#ifdef AUDIT_CRYPTO_SESSION
+ char buf[AUDIT_LOG_SIZE]; + char buf[AUDIT_LOG_SIZE];
+ const static char *name[] = { "cipher", "mac", "comp" }; + const static char *name[] = { "cipher", "mac", "comp" };
+ int audit_fd, audit_ok; + int audit_fd;
+ +
+ snprintf(buf, sizeof(buf), "unsupported-%s direction=? cipher=? ksize=? rport=%d laddr=%s lport=%d", + snprintf(buf, sizeof(buf), "op=unsupported-%s direction=? cipher=? ksize=? rport=%d laddr=%s lport=%d",
+ name[what], get_remote_port(), get_local_ipaddr(packet_get_connection_in()), + name[what], get_remote_port(), get_local_ipaddr(packet_get_connection_in()),
+ get_local_port()); + get_local_port());
+ audit_fd = audit_open(); + audit_fd = audit_open();
+ if (audit_fd < 0) + if (audit_fd < 0)
+ /* no problem, the next instruction will be fatal() */ + /* no problem, the next instruction will be fatal() */
+ return; + return;
+ audit_ok = audit_log_acct_message(audit_fd, AUDIT_CRYPTO_SESSION, NULL, + audit_log_user_message(audit_fd, AUDIT_CRYPTO_SESSION,
+ buf, NULL, -1, NULL, get_remote_ipaddr(), NULL, 0); + buf, NULL, get_remote_ipaddr(), NULL, 0);
+ audit_close(audit_fd); + audit_close(audit_fd);
+#endif +#endif
+} +}
@ -133,7 +133,7 @@ diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
+ const static char *direction[] = { "from-server", "from-client", "both" }; + const static char *direction[] = { "from-server", "from-client", "both" };
+ Cipher *cipher = cipher_by_name(enc); + Cipher *cipher = cipher_by_name(enc);
+ +
+ snprintf(buf, sizeof(buf), "start direction=%s cipher=%s, ksize=%d rport=%d laddr=%s lport=%d", + snprintf(buf, sizeof(buf), "op=start direction=%s cipher=%s ksize=%d rport=%d laddr=%s lport=%d",
+ direction[ctos], enc, cipher ? 8 * cipher->key_len : 0, + direction[ctos], enc, cipher ? 8 * cipher->key_len : 0,
+ get_remote_port(), get_local_ipaddr(packet_get_connection_in()), get_local_port()); + get_remote_port(), get_local_ipaddr(packet_get_connection_in()), get_local_port());
+ audit_fd = audit_open(); + audit_fd = audit_open();
@ -144,8 +144,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
+ else + else
+ fatal("cannot open audit"); /* Must prevent login */ + fatal("cannot open audit"); /* Must prevent login */
+ } + }
+ audit_ok = audit_log_acct_message(audit_fd, AUDIT_CRYPTO_SESSION, NULL, + audit_ok = audit_log_user_message(audit_fd, AUDIT_CRYPTO_SESSION,
+ buf, NULL, -1, NULL, get_remote_ipaddr(), NULL, 1); + buf, NULL, get_remote_ipaddr(), NULL, 1);
+ audit_close(audit_fd); + audit_close(audit_fd);
+ /* do not abort if the error is EPERM and sshd is run as non root user */ + /* do not abort if the error is EPERM and sshd is run as non root user */
+ if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0))) + if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0)))
@ -155,8 +155,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit3 openssh-5.8p1/audit-linux.c
+ +
#endif /* USE_LINUX_AUDIT */ #endif /* USE_LINUX_AUDIT */
diff -up openssh-5.8p1/auditstub.c.audit3 openssh-5.8p1/auditstub.c diff -up openssh-5.8p1/auditstub.c.audit3 openssh-5.8p1/auditstub.c
--- openssh-5.8p1/auditstub.c.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/auditstub.c.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/auditstub.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/auditstub.c 2011-02-17 15:09:38.000000000 +0100
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
+/* $Id: auditstub.c,v 1.1 jfch Exp $ */ +/* $Id: auditstub.c,v 1.1 jfch Exp $ */
+ +
@ -199,7 +199,7 @@ diff -up openssh-5.8p1/auditstub.c.audit3 openssh-5.8p1/auditstub.c
+ +
diff -up openssh-5.8p1/cipher.c.audit3 openssh-5.8p1/cipher.c diff -up openssh-5.8p1/cipher.c.audit3 openssh-5.8p1/cipher.c
--- openssh-5.8p1/cipher.c.audit3 2011-02-09 15:24:23.000000000 +0100 --- openssh-5.8p1/cipher.c.audit3 2011-02-09 15:24:23.000000000 +0100
+++ openssh-5.8p1/cipher.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/cipher.c 2011-02-17 15:09:38.000000000 +0100
@@ -59,15 +59,7 @@ extern void ssh1_3des_iv(EVP_CIPHER_CTX @@ -59,15 +59,7 @@ extern void ssh1_3des_iv(EVP_CIPHER_CTX
extern const EVP_CIPHER *evp_aes_128_ctr(void); extern const EVP_CIPHER *evp_aes_128_ctr(void);
extern void ssh_aes_ctr_iv(EVP_CIPHER_CTX *, int, u_char *, u_int); extern void ssh_aes_ctr_iv(EVP_CIPHER_CTX *, int, u_char *, u_int);
@ -219,7 +219,7 @@ diff -up openssh-5.8p1/cipher.c.audit3 openssh-5.8p1/cipher.c
{ "3des", SSH_CIPHER_3DES, 8, 16, 0, 1, evp_ssh1_3des }, { "3des", SSH_CIPHER_3DES, 8, 16, 0, 1, evp_ssh1_3des },
diff -up openssh-5.8p1/cipher.h.audit3 openssh-5.8p1/cipher.h diff -up openssh-5.8p1/cipher.h.audit3 openssh-5.8p1/cipher.h
--- openssh-5.8p1/cipher.h.audit3 2009-01-28 06:38:41.000000000 +0100 --- openssh-5.8p1/cipher.h.audit3 2009-01-28 06:38:41.000000000 +0100
+++ openssh-5.8p1/cipher.h 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/cipher.h 2011-02-17 15:09:38.000000000 +0100
@@ -61,7 +61,16 @@ @@ -61,7 +61,16 @@
typedef struct Cipher Cipher; typedef struct Cipher Cipher;
typedef struct CipherContext CipherContext; typedef struct CipherContext CipherContext;
@ -240,7 +240,7 @@ diff -up openssh-5.8p1/cipher.h.audit3 openssh-5.8p1/cipher.h
EVP_CIPHER_CTX evp; EVP_CIPHER_CTX evp;
diff -up openssh-5.8p1/kex.c.audit3 openssh-5.8p1/kex.c diff -up openssh-5.8p1/kex.c.audit3 openssh-5.8p1/kex.c
--- openssh-5.8p1/kex.c.audit3 2010-09-24 14:11:14.000000000 +0200 --- openssh-5.8p1/kex.c.audit3 2010-09-24 14:11:14.000000000 +0200
+++ openssh-5.8p1/kex.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/kex.c 2011-02-17 15:09:38.000000000 +0100
@@ -49,6 +49,7 @@ @@ -49,6 +49,7 @@
#include "dispatch.h" #include "dispatch.h"
#include "monitor.h" #include "monitor.h"
@ -305,7 +305,7 @@ diff -up openssh-5.8p1/kex.c.audit3 openssh-5.8p1/kex.c
choose_hostkeyalg(kex, cprop[PROPOSAL_SERVER_HOST_KEY_ALGS], choose_hostkeyalg(kex, cprop[PROPOSAL_SERVER_HOST_KEY_ALGS],
diff -up openssh-5.8p1/Makefile.in.audit3 openssh-5.8p1/Makefile.in diff -up openssh-5.8p1/Makefile.in.audit3 openssh-5.8p1/Makefile.in
--- openssh-5.8p1/Makefile.in.audit3 2011-02-04 01:42:13.000000000 +0100 --- openssh-5.8p1/Makefile.in.audit3 2011-02-04 01:42:13.000000000 +0100
+++ openssh-5.8p1/Makefile.in 2011-02-09 21:53:15.000000000 +0100 +++ openssh-5.8p1/Makefile.in 2011-02-17 15:09:38.000000000 +0100
@@ -76,7 +76,7 @@ LIBSSH_OBJS=acss.o authfd.o authfile.o b @@ -76,7 +76,7 @@ LIBSSH_OBJS=acss.o authfd.o authfile.o b
monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \ monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \
kexdh.o kexgex.o kexdhc.o kexgexc.o bufec.o kexecdh.o kexecdhc.o \ kexdh.o kexgex.o kexdhc.o kexgexc.o bufec.o kexecdh.o kexecdhc.o \
@ -316,8 +316,8 @@ diff -up openssh-5.8p1/Makefile.in.audit3 openssh-5.8p1/Makefile.in
SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \ SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \
sshconnect.o sshconnect1.o sshconnect2.o mux.o \ sshconnect.o sshconnect1.o sshconnect2.o mux.o \
diff -up openssh-5.8p1/monitor.c.audit3 openssh-5.8p1/monitor.c diff -up openssh-5.8p1/monitor.c.audit3 openssh-5.8p1/monitor.c
--- openssh-5.8p1/monitor.c.audit3 2011-02-09 21:51:19.000000000 +0100 --- openssh-5.8p1/monitor.c.audit3 2011-02-17 15:09:38.000000000 +0100
+++ openssh-5.8p1/monitor.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/monitor.c 2011-02-17 15:09:38.000000000 +0100
@@ -89,6 +89,7 @@ @@ -89,6 +89,7 @@
#include "ssh2.h" #include "ssh2.h"
#include "jpake.h" #include "jpake.h"
@ -414,7 +414,7 @@ diff -up openssh-5.8p1/monitor.c.audit3 openssh-5.8p1/monitor.c
+#endif /* SSH_AUDIT_EVENTS */ +#endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor.h.audit3 openssh-5.8p1/monitor.h diff -up openssh-5.8p1/monitor.h.audit3 openssh-5.8p1/monitor.h
--- openssh-5.8p1/monitor.h.audit3 2008-11-05 06:20:46.000000000 +0100 --- openssh-5.8p1/monitor.h.audit3 2008-11-05 06:20:46.000000000 +0100
+++ openssh-5.8p1/monitor.h 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/monitor.h 2011-02-17 15:09:38.000000000 +0100
@@ -66,6 +66,8 @@ enum monitor_reqtype { @@ -66,6 +66,8 @@ enum monitor_reqtype {
MONITOR_REQ_JPAKE_STEP2, MONITOR_ANS_JPAKE_STEP2, MONITOR_REQ_JPAKE_STEP2, MONITOR_ANS_JPAKE_STEP2,
MONITOR_REQ_JPAKE_KEY_CONFIRM, MONITOR_ANS_JPAKE_KEY_CONFIRM, MONITOR_REQ_JPAKE_KEY_CONFIRM, MONITOR_ANS_JPAKE_KEY_CONFIRM,
@ -426,7 +426,7 @@ diff -up openssh-5.8p1/monitor.h.audit3 openssh-5.8p1/monitor.h
struct mm_master; struct mm_master;
diff -up openssh-5.8p1/monitor_wrap.c.audit3 openssh-5.8p1/monitor_wrap.c diff -up openssh-5.8p1/monitor_wrap.c.audit3 openssh-5.8p1/monitor_wrap.c
--- openssh-5.8p1/monitor_wrap.c.audit3 2010-08-31 14:41:14.000000000 +0200 --- openssh-5.8p1/monitor_wrap.c.audit3 2010-08-31 14:41:14.000000000 +0200
+++ openssh-5.8p1/monitor_wrap.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.c 2011-02-17 15:09:38.000000000 +0100
@@ -1412,3 +1412,38 @@ mm_jpake_check_confirm(const BIGNUM *k, @@ -1412,3 +1412,38 @@ mm_jpake_check_confirm(const BIGNUM *k,
return success; return success;
} }
@ -468,7 +468,7 @@ diff -up openssh-5.8p1/monitor_wrap.c.audit3 openssh-5.8p1/monitor_wrap.c
+#endif /* SSH_AUDIT_EVENTS */ +#endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor_wrap.h.audit3 openssh-5.8p1/monitor_wrap.h diff -up openssh-5.8p1/monitor_wrap.h.audit3 openssh-5.8p1/monitor_wrap.h
--- openssh-5.8p1/monitor_wrap.h.audit3 2009-03-05 14:58:22.000000000 +0100 --- openssh-5.8p1/monitor_wrap.h.audit3 2009-03-05 14:58:22.000000000 +0100
+++ openssh-5.8p1/monitor_wrap.h 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.h 2011-02-17 15:09:38.000000000 +0100
@@ -74,6 +74,8 @@ void mm_sshpam_free_ctx(void *); @@ -74,6 +74,8 @@ void mm_sshpam_free_ctx(void *);
#include "audit.h" #include "audit.h"
void mm_audit_event(ssh_audit_event_t); void mm_audit_event(ssh_audit_event_t);
@ -480,7 +480,7 @@ diff -up openssh-5.8p1/monitor_wrap.h.audit3 openssh-5.8p1/monitor_wrap.h
struct Session; struct Session;
diff -up openssh-5.8p1/sshd.c.audit3 openssh-5.8p1/sshd.c diff -up openssh-5.8p1/sshd.c.audit3 openssh-5.8p1/sshd.c
--- openssh-5.8p1/sshd.c.audit3 2011-01-11 07:20:31.000000000 +0100 --- openssh-5.8p1/sshd.c.audit3 2011-01-11 07:20:31.000000000 +0100
+++ openssh-5.8p1/sshd.c 2011-02-09 21:51:19.000000000 +0100 +++ openssh-5.8p1/sshd.c 2011-02-17 15:09:38.000000000 +0100
@@ -118,6 +118,7 @@ @@ -118,6 +118,7 @@
#endif #endif
#include "monitor_wrap.h" #include "monitor_wrap.h"

View File

@ -1,6 +1,6 @@
diff -up openssh-5.8p1/audit-bsm.c.audit4 openssh-5.8p1/audit-bsm.c diff -up openssh-5.8p1/audit-bsm.c.audit4 openssh-5.8p1/audit-bsm.c
--- openssh-5.8p1/audit-bsm.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/audit-bsm.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/audit-bsm.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/audit-bsm.c 2011-02-17 10:34:25.000000000 +0100
@@ -395,4 +395,10 @@ audit_kex_body(int ctos, char *enc, char @@ -395,4 +395,10 @@ audit_kex_body(int ctos, char *enc, char
{ {
/* not implemented */ /* not implemented */
@ -13,8 +13,8 @@ diff -up openssh-5.8p1/audit-bsm.c.audit4 openssh-5.8p1/audit-bsm.c
+} +}
#endif /* BSM */ #endif /* BSM */
diff -up openssh-5.8p1/audit.c.audit4 openssh-5.8p1/audit.c diff -up openssh-5.8p1/audit.c.audit4 openssh-5.8p1/audit.c
--- openssh-5.8p1/audit.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/audit.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/audit.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/audit.c 2011-02-17 10:34:25.000000000 +0100
@@ -152,6 +152,12 @@ audit_kex(int ctos, char *enc, char *mac @@ -152,6 +152,12 @@ audit_kex(int ctos, char *enc, char *mac
PRIVSEP(audit_kex_body(ctos, enc, mac, comp)); PRIVSEP(audit_kex_body(ctos, enc, mac, comp));
} }
@ -43,8 +43,8 @@ diff -up openssh-5.8p1/audit.c.audit4 openssh-5.8p1/audit.c
# endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */ # endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/audit.h.audit4 openssh-5.8p1/audit.h diff -up openssh-5.8p1/audit.h.audit4 openssh-5.8p1/audit.h
--- openssh-5.8p1/audit.h.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/audit.h.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/audit.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/audit.h 2011-02-17 10:34:25.000000000 +0100
@@ -60,5 +60,7 @@ void audit_unsupported(int); @@ -60,5 +60,7 @@ void audit_unsupported(int);
void audit_kex(int, char *, char *, char *); void audit_kex(int, char *, char *, char *);
void audit_unsupported_body(int); void audit_unsupported_body(int);
@ -54,9 +54,9 @@ diff -up openssh-5.8p1/audit.h.audit4 openssh-5.8p1/audit.h
#endif /* _SSH_AUDIT_H */ #endif /* _SSH_AUDIT_H */
diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c
--- openssh-5.8p1/audit-linux.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/audit-linux.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/audit-linux.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/audit-linux.c 2011-02-17 10:34:25.000000000 +0100
@@ -179,13 +179,14 @@ audit_unsupported_body(int what) @@ -246,13 +246,14 @@ audit_unsupported_body(int what)
#endif #endif
} }
@ -71,8 +71,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c
- const static char *direction[] = { "from-server", "from-client", "both" }; - const static char *direction[] = { "from-server", "from-client", "both" };
Cipher *cipher = cipher_by_name(enc); Cipher *cipher = cipher_by_name(enc);
snprintf(buf, sizeof(buf), "start direction=%s cipher=%s, ksize=%d rport=%d laddr=%s lport=%d", snprintf(buf, sizeof(buf), "op=start direction=%s cipher=%s ksize=%d rport=%d laddr=%s lport=%d",
@@ -208,4 +209,26 @@ audit_kex_body(int ctos, char *enc, char @@ -275,4 +276,29 @@ audit_kex_body(int ctos, char *enc, char
#endif #endif
} }
@ -82,7 +82,10 @@ diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c
+ char buf[AUDIT_LOG_SIZE]; + char buf[AUDIT_LOG_SIZE];
+ int audit_fd, audit_ok; + int audit_fd, audit_ok;
+ +
+ snprintf(buf, sizeof(buf), "destroy kind=session direction=%s", direction[ctos]); + snprintf(buf, sizeof(buf), "op=destroy kind=session direction=%s rport=%d laddr=%s lport=%d",
+ direction[ctos], get_remote_port(),
+ get_local_ipaddr(packet_get_connection_in()),
+ get_local_port());
+ audit_fd = audit_open(); + audit_fd = audit_open();
+ if (audit_fd < 0) { + if (audit_fd < 0) {
+ if (errno != EINVAL && errno != EPROTONOSUPPORT && + if (errno != EINVAL && errno != EPROTONOSUPPORT &&
@ -90,8 +93,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c
+ error("cannot open audit"); + error("cannot open audit");
+ return; + return;
+ } + }
+ audit_ok = audit_log_acct_message(audit_fd, AUDIT_CRYPTO_KEY_USER, NULL, + audit_ok = audit_log_user_message(audit_fd, AUDIT_CRYPTO_KEY_USER,
+ buf, NULL, -1, NULL, get_remote_ipaddr(), NULL, 1); + buf, NULL, get_remote_ipaddr(), NULL, 1);
+ audit_close(audit_fd); + audit_close(audit_fd);
+ /* do not abort if the error is EPERM and sshd is run as non root user */ + /* do not abort if the error is EPERM and sshd is run as non root user */
+ if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0))) + if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0)))
@ -100,8 +103,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit4 openssh-5.8p1/audit-linux.c
+ +
#endif /* USE_LINUX_AUDIT */ #endif /* USE_LINUX_AUDIT */
diff -up openssh-5.8p1/auditstub.c.audit4 openssh-5.8p1/auditstub.c diff -up openssh-5.8p1/auditstub.c.audit4 openssh-5.8p1/auditstub.c
--- openssh-5.8p1/auditstub.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/auditstub.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/auditstub.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/auditstub.c 2011-02-17 10:34:25.000000000 +0100
@@ -37,3 +37,7 @@ audit_kex(int ctos, char *enc, char *mac @@ -37,3 +37,7 @@ audit_kex(int ctos, char *enc, char *mac
{ {
} }
@ -111,8 +114,8 @@ diff -up openssh-5.8p1/auditstub.c.audit4 openssh-5.8p1/auditstub.c
+{ +{
+} +}
diff -up openssh-5.8p1/kex.c.audit4 openssh-5.8p1/kex.c diff -up openssh-5.8p1/kex.c.audit4 openssh-5.8p1/kex.c
--- openssh-5.8p1/kex.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/kex.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/kex.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/kex.c 2011-02-17 10:34:25.000000000 +0100
@@ -624,3 +624,34 @@ dump_digest(char *msg, u_char *digest, i @@ -624,3 +624,34 @@ dump_digest(char *msg, u_char *digest, i
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
@ -150,7 +153,7 @@ diff -up openssh-5.8p1/kex.c.audit4 openssh-5.8p1/kex.c
+ +
diff -up openssh-5.8p1/kex.h.audit4 openssh-5.8p1/kex.h diff -up openssh-5.8p1/kex.h.audit4 openssh-5.8p1/kex.h
--- openssh-5.8p1/kex.h.audit4 2010-09-24 14:11:14.000000000 +0200 --- openssh-5.8p1/kex.h.audit4 2010-09-24 14:11:14.000000000 +0200
+++ openssh-5.8p1/kex.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/kex.h 2011-02-17 10:34:25.000000000 +0100
@@ -156,6 +156,8 @@ void kexgex_server(Kex *); @@ -156,6 +156,8 @@ void kexgex_server(Kex *);
void kexecdh_client(Kex *); void kexecdh_client(Kex *);
void kexecdh_server(Kex *); void kexecdh_server(Kex *);
@ -162,7 +165,7 @@ diff -up openssh-5.8p1/kex.h.audit4 openssh-5.8p1/kex.h
BIGNUM *, BIGNUM *, BIGNUM *, u_char **, u_int *); BIGNUM *, BIGNUM *, BIGNUM *, u_char **, u_int *);
diff -up openssh-5.8p1/mac.c.audit4 openssh-5.8p1/mac.c diff -up openssh-5.8p1/mac.c.audit4 openssh-5.8p1/mac.c
--- openssh-5.8p1/mac.c.audit4 2008-06-13 02:58:50.000000000 +0200 --- openssh-5.8p1/mac.c.audit4 2008-06-13 02:58:50.000000000 +0200
+++ openssh-5.8p1/mac.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/mac.c 2011-02-17 10:34:25.000000000 +0100
@@ -162,6 +162,20 @@ mac_clear(Mac *mac) @@ -162,6 +162,20 @@ mac_clear(Mac *mac)
mac->umac_ctx = NULL; mac->umac_ctx = NULL;
} }
@ -186,15 +189,15 @@ diff -up openssh-5.8p1/mac.c.audit4 openssh-5.8p1/mac.c
int int
diff -up openssh-5.8p1/mac.h.audit4 openssh-5.8p1/mac.h diff -up openssh-5.8p1/mac.h.audit4 openssh-5.8p1/mac.h
--- openssh-5.8p1/mac.h.audit4 2007-06-11 06:01:42.000000000 +0200 --- openssh-5.8p1/mac.h.audit4 2007-06-11 06:01:42.000000000 +0200
+++ openssh-5.8p1/mac.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/mac.h 2011-02-17 10:34:25.000000000 +0100
@@ -28,3 +28,4 @@ int mac_setup(Mac *, char *); @@ -28,3 +28,4 @@ int mac_setup(Mac *, char *);
int mac_init(Mac *); int mac_init(Mac *);
u_char *mac_compute(Mac *, u_int32_t, u_char *, int); u_char *mac_compute(Mac *, u_int32_t, u_char *, int);
void mac_clear(Mac *); void mac_clear(Mac *);
+void mac_destroy(Mac *); +void mac_destroy(Mac *);
diff -up openssh-5.8p1/monitor.c.audit4 openssh-5.8p1/monitor.c diff -up openssh-5.8p1/monitor.c.audit4 openssh-5.8p1/monitor.c
--- openssh-5.8p1/monitor.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/monitor.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/monitor.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/monitor.c 2011-02-17 10:34:25.000000000 +0100
@@ -180,6 +180,7 @@ int mm_answer_audit_event(int, Buffer *) @@ -180,6 +180,7 @@ int mm_answer_audit_event(int, Buffer *)
int mm_answer_audit_command(int, Buffer *); int mm_answer_audit_command(int, Buffer *);
int mm_answer_audit_unsupported_body(int, Buffer *); int mm_answer_audit_unsupported_body(int, Buffer *);
@ -255,8 +258,8 @@ diff -up openssh-5.8p1/monitor.c.audit4 openssh-5.8p1/monitor.c
+} +}
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor.h.audit4 openssh-5.8p1/monitor.h diff -up openssh-5.8p1/monitor.h.audit4 openssh-5.8p1/monitor.h
--- openssh-5.8p1/monitor.h.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/monitor.h.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/monitor.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/monitor.h 2011-02-17 10:34:25.000000000 +0100
@@ -68,6 +68,7 @@ enum monitor_reqtype { @@ -68,6 +68,7 @@ enum monitor_reqtype {
MONITOR_REQ_JPAKE_CHECK_CONFIRM, MONITOR_ANS_JPAKE_CHECK_CONFIRM, MONITOR_REQ_JPAKE_CHECK_CONFIRM, MONITOR_ANS_JPAKE_CHECK_CONFIRM,
MONITOR_REQ_AUDIT_UNSUPPORTED, MONITOR_ANS_AUDIT_UNSUPPORTED, MONITOR_REQ_AUDIT_UNSUPPORTED, MONITOR_ANS_AUDIT_UNSUPPORTED,
@ -266,8 +269,8 @@ diff -up openssh-5.8p1/monitor.h.audit4 openssh-5.8p1/monitor.h
struct mm_master; struct mm_master;
diff -up openssh-5.8p1/monitor_wrap.c.audit4 openssh-5.8p1/monitor_wrap.c diff -up openssh-5.8p1/monitor_wrap.c.audit4 openssh-5.8p1/monitor_wrap.c
--- openssh-5.8p1/monitor_wrap.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/monitor_wrap.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/monitor_wrap.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.c 2011-02-17 10:34:25.000000000 +0100
@@ -1446,4 +1446,17 @@ mm_audit_kex_body(int ctos, char *cipher @@ -1446,4 +1446,17 @@ mm_audit_kex_body(int ctos, char *cipher
buffer_free(&m); buffer_free(&m);
@ -287,8 +290,8 @@ diff -up openssh-5.8p1/monitor_wrap.c.audit4 openssh-5.8p1/monitor_wrap.c
+} +}
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor_wrap.h.audit4 openssh-5.8p1/monitor_wrap.h diff -up openssh-5.8p1/monitor_wrap.h.audit4 openssh-5.8p1/monitor_wrap.h
--- openssh-5.8p1/monitor_wrap.h.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/monitor_wrap.h.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/monitor_wrap.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.h 2011-02-17 10:34:25.000000000 +0100
@@ -76,6 +76,7 @@ void mm_audit_event(ssh_audit_event_t); @@ -76,6 +76,7 @@ void mm_audit_event(ssh_audit_event_t);
void mm_audit_run_command(const char *); void mm_audit_run_command(const char *);
void mm_audit_unsupported_body(int); void mm_audit_unsupported_body(int);
@ -299,7 +302,7 @@ diff -up openssh-5.8p1/monitor_wrap.h.audit4 openssh-5.8p1/monitor_wrap.h
struct Session; struct Session;
diff -up openssh-5.8p1/packet.c.audit4 openssh-5.8p1/packet.c diff -up openssh-5.8p1/packet.c.audit4 openssh-5.8p1/packet.c
--- openssh-5.8p1/packet.c.audit4 2010-11-24 00:46:37.000000000 +0100 --- openssh-5.8p1/packet.c.audit4 2010-11-24 00:46:37.000000000 +0100
+++ openssh-5.8p1/packet.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/packet.c 2011-02-17 10:34:25.000000000 +0100
@@ -497,6 +497,7 @@ packet_close(void) @@ -497,6 +497,7 @@ packet_close(void)
} }
cipher_cleanup(&active_state->send_context); cipher_cleanup(&active_state->send_context);
@ -394,7 +397,7 @@ diff -up openssh-5.8p1/packet.c.audit4 openssh-5.8p1/packet.c
+ +
diff -up openssh-5.8p1/packet.h.audit4 openssh-5.8p1/packet.h diff -up openssh-5.8p1/packet.h.audit4 openssh-5.8p1/packet.h
--- openssh-5.8p1/packet.h.audit4 2010-11-20 05:19:38.000000000 +0100 --- openssh-5.8p1/packet.h.audit4 2010-11-20 05:19:38.000000000 +0100
+++ openssh-5.8p1/packet.h 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/packet.h 2011-02-17 10:34:25.000000000 +0100
@@ -125,4 +125,5 @@ void packet_restore_state(void); @@ -125,4 +125,5 @@ void packet_restore_state(void);
void *packet_get_input(void); void *packet_get_input(void);
void *packet_get_output(void); void *packet_get_output(void);
@ -402,8 +405,8 @@ diff -up openssh-5.8p1/packet.h.audit4 openssh-5.8p1/packet.h
+void packet_destroy_all(void); +void packet_destroy_all(void);
#endif /* PACKET_H */ #endif /* PACKET_H */
diff -up openssh-5.8p1/sshd.c.audit4 openssh-5.8p1/sshd.c diff -up openssh-5.8p1/sshd.c.audit4 openssh-5.8p1/sshd.c
--- openssh-5.8p1/sshd.c.audit4 2011-02-09 22:24:22.000000000 +0100 --- openssh-5.8p1/sshd.c.audit4 2011-02-17 10:34:25.000000000 +0100
+++ openssh-5.8p1/sshd.c 2011-02-09 22:24:22.000000000 +0100 +++ openssh-5.8p1/sshd.c 2011-02-17 10:34:25.000000000 +0100
@@ -663,6 +663,8 @@ privsep_preauth(Authctxt *authctxt) @@ -663,6 +663,8 @@ privsep_preauth(Authctxt *authctxt)
return (0); return (0);
} }

View File

@ -1,20 +1,20 @@
diff -up openssh-5.8p1/audit-bsm.c.audit5 openssh-5.8p1/audit-bsm.c diff -up openssh-5.8p1/audit-bsm.c.audit5 openssh-5.8p1/audit-bsm.c
--- openssh-5.8p1/audit-bsm.c.audit5 2011-02-09 22:33:51.000000000 +0100 --- openssh-5.8p1/audit-bsm.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/audit-bsm.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/audit-bsm.c 2011-02-17 10:36:14.000000000 +0100
@@ -401,4 +401,10 @@ audit_session_key_free_body(int ctos) @@ -401,4 +401,10 @@ audit_session_key_free_body(int ctos)
{ {
/* not implemented */ /* not implemented */
} }
+ +
+void +void
+audit_destroy_sensitive_data(void) +audit_destroy_sensitive_data(const char *fp)
+{ +{
+ /* not implemented */ + /* not implemented */
+} +}
#endif /* BSM */ #endif /* BSM */
diff -up openssh-5.8p1/audit.c.audit5 openssh-5.8p1/audit.c diff -up openssh-5.8p1/audit.c.audit5 openssh-5.8p1/audit.c
--- openssh-5.8p1/audit.c.audit5 2011-02-09 22:33:51.000000000 +0100 --- openssh-5.8p1/audit.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/audit.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/audit.c 2011-02-17 10:36:14.000000000 +0100
@@ -268,5 +268,14 @@ audit_session_key_free_body(int ctos) @@ -268,5 +268,14 @@ audit_session_key_free_body(int ctos)
{ {
debug("audit session key discard euid %d direction %d", geteuid(), ctos); debug("audit session key discard euid %d direction %d", geteuid(), ctos);
@ -24,36 +24,36 @@ diff -up openssh-5.8p1/audit.c.audit5 openssh-5.8p1/audit.c
+ * This will be called on destroy private part of the server key + * This will be called on destroy private part of the server key
+ */ + */
+void +void
+audit_destroy_sensitive_data(void) +audit_destroy_sensitive_data(const char *fp)
+{ +{
+ debug("audit destroy sensitive data euid %d", geteuid()); + debug("audit destroy sensitive data euid %d fingerprint %s", geteuid(), fp);
+} +}
# endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */ # endif /* !defined CUSTOM_SSH_AUDIT_EVENTS */
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/audit.h.audit5 openssh-5.8p1/audit.h diff -up openssh-5.8p1/audit.h.audit5 openssh-5.8p1/audit.h
--- openssh-5.8p1/audit.h.audit5 2011-02-09 22:33:51.000000000 +0100 --- openssh-5.8p1/audit.h.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/audit.h 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/audit.h 2011-02-17 10:36:14.000000000 +0100
@@ -62,5 +62,6 @@ void audit_unsupported_body(int); @@ -62,5 +62,6 @@ void audit_unsupported_body(int);
void audit_kex_body(int, char *, char *, char *); void audit_kex_body(int, char *, char *, char *);
void audit_session_key_free(int ctos); void audit_session_key_free(int ctos);
void audit_session_key_free_body(int ctos); void audit_session_key_free_body(int ctos);
+void audit_destroy_sensitive_data(void); +void audit_destroy_sensitive_data(const char *);
#endif /* _SSH_AUDIT_H */ #endif /* _SSH_AUDIT_H */
diff -up openssh-5.8p1/audit-linux.c.audit5 openssh-5.8p1/audit-linux.c diff -up openssh-5.8p1/audit-linux.c.audit5 openssh-5.8p1/audit-linux.c
--- openssh-5.8p1/audit-linux.c.audit5 2011-02-09 22:33:51.000000000 +0100 --- openssh-5.8p1/audit-linux.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/audit-linux.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/audit-linux.c 2011-02-17 10:36:14.000000000 +0100
@@ -231,4 +231,26 @@ audit_session_key_free_body(int ctos) @@ -301,4 +301,26 @@ audit_session_key_free_body(int ctos)
error("cannot write into audit"); error("cannot write into audit");
} }
+void +void
+audit_destroy_sensitive_data(void) +audit_destroy_sensitive_data(const char *fp)
+{ +{
+ char buf[AUDIT_LOG_SIZE]; + char buf[AUDIT_LOG_SIZE];
+ int audit_fd, audit_ok; + int audit_fd, audit_ok;
+ +
+ snprintf(buf, sizeof(buf), "destroy kind=server direction=?"); + snprintf(buf, sizeof(buf), "op=destroy kind=server fp=%s direction=?", fp);
+ audit_fd = audit_open(); + audit_fd = audit_open();
+ if (audit_fd < 0) { + if (audit_fd < 0) {
+ if (errno != EINVAL && errno != EPROTONOSUPPORT && + if (errno != EINVAL && errno != EPROTONOSUPPORT &&
@ -61,8 +61,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit5 openssh-5.8p1/audit-linux.c
+ error("cannot open audit"); + error("cannot open audit");
+ return; + return;
+ } + }
+ audit_ok = audit_log_acct_message(audit_fd, AUDIT_CRYPTO_KEY_USER, NULL, + audit_ok = audit_log_user_message(audit_fd, AUDIT_CRYPTO_KEY_USER,
+ buf, NULL, -1, NULL, get_remote_ipaddr(), NULL, 1); + buf, NULL, get_remote_ipaddr(), NULL, 1);
+ audit_close(audit_fd); + audit_close(audit_fd);
+ /* do not abort if the error is EPERM and sshd is run as non root user */ + /* do not abort if the error is EPERM and sshd is run as non root user */
+ if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0))) + if ((audit_ok < 0) && ((audit_ok != -1) || (getuid() == 0)))
@ -71,8 +71,8 @@ diff -up openssh-5.8p1/audit-linux.c.audit5 openssh-5.8p1/audit-linux.c
+ +
#endif /* USE_LINUX_AUDIT */ #endif /* USE_LINUX_AUDIT */
diff -up openssh-5.8p1/monitor.c.audit5 openssh-5.8p1/monitor.c diff -up openssh-5.8p1/monitor.c.audit5 openssh-5.8p1/monitor.c
--- openssh-5.8p1/monitor.c.audit5 2011-02-09 22:33:52.000000000 +0100 --- openssh-5.8p1/monitor.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/monitor.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/monitor.c 2011-02-17 10:36:14.000000000 +0100
@@ -181,6 +181,7 @@ int mm_answer_audit_command(int, Buffer @@ -181,6 +181,7 @@ int mm_answer_audit_command(int, Buffer
int mm_answer_audit_unsupported_body(int, Buffer *); int mm_answer_audit_unsupported_body(int, Buffer *);
int mm_answer_audit_kex_body(int, Buffer *); int mm_answer_audit_kex_body(int, Buffer *);
@ -113,7 +113,7 @@ diff -up openssh-5.8p1/monitor.c.audit5 openssh-5.8p1/monitor.c
#endif #endif
{0, 0, NULL} {0, 0, NULL}
}; };
@@ -2272,4 +2277,15 @@ mm_answer_audit_session_key_free_body(in @@ -2272,4 +2277,20 @@ mm_answer_audit_session_key_free_body(in
mm_request_send(sock, MONITOR_ANS_AUDIT_SESSION_KEY_FREE, m); mm_request_send(sock, MONITOR_ANS_AUDIT_SESSION_KEY_FREE, m);
return 0; return 0;
} }
@ -121,7 +121,12 @@ diff -up openssh-5.8p1/monitor.c.audit5 openssh-5.8p1/monitor.c
+int +int
+mm_answer_audit_server_key_free(int sock, Buffer *m) +mm_answer_audit_server_key_free(int sock, Buffer *m)
+{ +{
+ audit_destroy_sensitive_data(); + int len;
+ char *fp;
+
+ fp = buffer_get_string(m, &len);
+
+ audit_destroy_sensitive_data(fp);
+ +
+ buffer_clear(m); + buffer_clear(m);
+ +
@ -130,8 +135,8 @@ diff -up openssh-5.8p1/monitor.c.audit5 openssh-5.8p1/monitor.c
+} +}
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor.h.audit5 openssh-5.8p1/monitor.h diff -up openssh-5.8p1/monitor.h.audit5 openssh-5.8p1/monitor.h
--- openssh-5.8p1/monitor.h.audit5 2011-02-09 22:33:52.000000000 +0100 --- openssh-5.8p1/monitor.h.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/monitor.h 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/monitor.h 2011-02-17 10:36:14.000000000 +0100
@@ -69,6 +69,7 @@ enum monitor_reqtype { @@ -69,6 +69,7 @@ enum monitor_reqtype {
MONITOR_REQ_AUDIT_UNSUPPORTED, MONITOR_ANS_AUDIT_UNSUPPORTED, MONITOR_REQ_AUDIT_UNSUPPORTED, MONITOR_ANS_AUDIT_UNSUPPORTED,
MONITOR_REQ_AUDIT_KEX, MONITOR_ANS_AUDIT_KEX, MONITOR_REQ_AUDIT_KEX, MONITOR_ANS_AUDIT_KEX,
@ -141,19 +146,21 @@ diff -up openssh-5.8p1/monitor.h.audit5 openssh-5.8p1/monitor.h
struct mm_master; struct mm_master;
diff -up openssh-5.8p1/monitor_wrap.c.audit5 openssh-5.8p1/monitor_wrap.c diff -up openssh-5.8p1/monitor_wrap.c.audit5 openssh-5.8p1/monitor_wrap.c
--- openssh-5.8p1/monitor_wrap.c.audit5 2011-02-09 22:33:52.000000000 +0100 --- openssh-5.8p1/monitor_wrap.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/monitor_wrap.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.c 2011-02-17 10:36:14.000000000 +0100
@@ -1459,4 +1459,16 @@ mm_audit_session_key_free_body(int ctos) @@ -1459,4 +1459,18 @@ mm_audit_session_key_free_body(int ctos)
&m); &m);
buffer_free(&m); buffer_free(&m);
} }
+ +
+void +void
+mm_audit_destroy_sensitive_data(void) +mm_audit_destroy_sensitive_data(const char *fp)
+{ +{
+ Buffer m; + Buffer m;
+ +
+ buffer_init(&m); + buffer_init(&m);
+ buffer_put_cstring(&m, fp);
+
+ mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUDIT_SERVER_KEY_FREE, &m); + mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUDIT_SERVER_KEY_FREE, &m);
+ mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_AUDIT_SERVER_KEY_FREE, + mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_AUDIT_SERVER_KEY_FREE,
+ &m); + &m);
@ -161,55 +168,108 @@ diff -up openssh-5.8p1/monitor_wrap.c.audit5 openssh-5.8p1/monitor_wrap.c
+} +}
#endif /* SSH_AUDIT_EVENTS */ #endif /* SSH_AUDIT_EVENTS */
diff -up openssh-5.8p1/monitor_wrap.h.audit5 openssh-5.8p1/monitor_wrap.h diff -up openssh-5.8p1/monitor_wrap.h.audit5 openssh-5.8p1/monitor_wrap.h
--- openssh-5.8p1/monitor_wrap.h.audit5 2011-02-09 22:33:52.000000000 +0100 --- openssh-5.8p1/monitor_wrap.h.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/monitor_wrap.h 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/monitor_wrap.h 2011-02-17 10:36:14.000000000 +0100
@@ -77,6 +77,7 @@ void mm_audit_run_command(const char *); @@ -77,6 +77,7 @@ void mm_audit_run_command(const char *);
void mm_audit_unsupported_body(int); void mm_audit_unsupported_body(int);
void mm_audit_kex_body(int, char *, char *, char *); void mm_audit_kex_body(int, char *, char *, char *);
void mm_audit_session_key_free_body(int); void mm_audit_session_key_free_body(int);
+void mm_audit_server_key_free_body(void); +void mm_audit_destroy_sensitive_data(const char *);
#endif #endif
struct Session; struct Session;
diff -up openssh-5.8p1/session.c.audit5 openssh-5.8p1/session.c diff -up openssh-5.8p1/session.c.audit5 openssh-5.8p1/session.c
--- openssh-5.8p1/session.c.audit5 2010-12-01 02:02:59.000000000 +0100 --- openssh-5.8p1/session.c.audit5 2010-12-01 02:02:59.000000000 +0100
+++ openssh-5.8p1/session.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/session.c 2011-02-17 10:36:14.000000000 +0100
@@ -1615,6 +1615,7 @@ do_child(Session *s, const char *command @@ -132,7 +132,7 @@ extern int log_stderr;
extern int debug_flag;
extern u_int utmp_len;
extern int startup_pipe;
-extern void destroy_sensitive_data(void);
+extern void destroy_sensitive_data(int);
extern Buffer loginmsg;
/* original command from peer. */
@@ -1614,7 +1614,7 @@ do_child(Session *s, const char *command
int r = 0;
/* remove hostkey from the child's memory */ /* remove hostkey from the child's memory */
destroy_sensitive_data(); - destroy_sensitive_data();
+ PRIVSEP(audit_destroy_sensitive_data()); + destroy_sensitive_data(1);
/* Force a password change */ /* Force a password change */
if (s->authctxt->force_pwchange) { if (s->authctxt->force_pwchange) {
diff -up openssh-5.8p1/sshd.c.audit5 openssh-5.8p1/sshd.c diff -up openssh-5.8p1/sshd.c.audit5 openssh-5.8p1/sshd.c
--- openssh-5.8p1/sshd.c.audit5 2011-02-09 22:33:52.000000000 +0100 --- openssh-5.8p1/sshd.c.audit5 2011-02-17 10:36:14.000000000 +0100
+++ openssh-5.8p1/sshd.c 2011-02-09 22:33:52.000000000 +0100 +++ openssh-5.8p1/sshd.c 2011-02-17 10:36:14.000000000 +0100
@@ -579,6 +579,7 @@ demote_sensitive_data(void) @@ -253,7 +253,7 @@ Buffer loginmsg;
struct passwd *privsep_pw = NULL;
/* Prototypes for various functions defined later in this file. */
-void destroy_sensitive_data(void);
+void destroy_sensitive_data(int);
void demote_sensitive_data(void);
static void do_ssh1_kex(void);
@@ -534,7 +534,7 @@ sshd_exchange_identification(int sock_in
/* Destroy the host and server keys. They will no longer be needed. */
void
-destroy_sensitive_data(void)
+destroy_sensitive_data(int privsep)
{
int i;
@@ -544,8 +544,16 @@ destroy_sensitive_data(void)
}
for (i = 0; i < options.num_host_key_files; i++) {
if (sensitive_data.host_keys[i]) {
+ char *fp;
+
+ fp = key_fingerprint(sensitive_data.host_keys[i],
+ FIPS_mode() ? SSH_FP_SHA1 : SSH_FP_MD5, SSH_FP_HEX);
key_free(sensitive_data.host_keys[i]);
sensitive_data.host_keys[i] = NULL;
+ if (privsep)
+ PRIVSEP(audit_destroy_sensitive_data(fp));
+ else
+ audit_destroy_sensitive_data(fp);
}
if (sensitive_data.host_certificates[i]) {
key_free(sensitive_data.host_certificates[i]);
@@ -571,11 +579,17 @@ demote_sensitive_data(void)
for (i = 0; i < options.num_host_key_files; i++) {
if (sensitive_data.host_keys[i]) {
+ char *fp;
+
+ fp = key_fingerprint(sensitive_data.host_keys[i],
+ FIPS_mode() ? SSH_FP_SHA1 : SSH_FP_MD5, SSH_FP_HEX);
tmp = key_demote(sensitive_data.host_keys[i]);
key_free(sensitive_data.host_keys[i]);
sensitive_data.host_keys[i] = tmp;
if (tmp->type == KEY_RSA1)
sensitive_data.ssh1_host_key = tmp;
+ audit_destroy_sensitive_data(fp);
+ xfree(fp);
} }
/* Certs do not need demotion */ /* Certs do not need demotion */
} }
+ audit_destroy_sensitive_data(); @@ -2024,7 +2038,7 @@ main(int ac, char **av)
/* We do not clear ssh1_host key and cookie. XXX - Okay Niels? */
}
@@ -2023,8 +2024,10 @@ main(int ac, char **av)
if (use_privsep) {
privsep_postauth(authctxt); privsep_postauth(authctxt);
/* the monitor process [priv] will not return */ /* the monitor process [priv] will not return */
- if (!compat20) if (!compat20)
+ if (!compat20) { - destroy_sensitive_data();
destroy_sensitive_data(); + destroy_sensitive_data(0);
+ audit_destroy_sensitive_data();
+ }
} }
packet_set_timeout(options.client_alive_interval, packet_set_timeout(options.client_alive_interval,
@@ -2265,6 +2268,7 @@ do_ssh1_kex(void) @@ -2264,7 +2278,7 @@ do_ssh1_kex(void)
session_id[i] = session_key[i] ^ session_key[i + 16];
} }
/* Destroy the private and public keys. No longer. */ /* Destroy the private and public keys. No longer. */
destroy_sensitive_data(); - destroy_sensitive_data();
+ audit_destroy_sensitive_data(); + destroy_sensitive_data(0);
if (use_privsep) if (use_privsep)
mm_ssh1_session_id(session_id); mm_ssh1_session_id(session_id);

View File

@ -71,7 +71,7 @@
# Do not forget to bump pam_ssh_agent_auth release if you rewind the main package release to 1 # Do not forget to bump pam_ssh_agent_auth release if you rewind the main package release to 1
%define openssh_ver 5.8p1 %define openssh_ver 5.8p1
%define openssh_rel 3 %define openssh_rel 4
%define pam_ssh_agent_ver 0.9.2 %define pam_ssh_agent_ver 0.9.2
%define pam_ssh_agent_rel 30 %define pam_ssh_agent_rel 30
@ -93,14 +93,16 @@ Source3: sshd.init
Source4: http://prdownloads.sourceforge.net/pamsshagentauth/pam_ssh_agent_auth/pam_ssh_agent_auth-%{pam_ssh_agent_ver}.tar.bz2 Source4: http://prdownloads.sourceforge.net/pamsshagentauth/pam_ssh_agent_auth/pam_ssh_agent_auth-%{pam_ssh_agent_ver}.tar.bz2
Source5: pam_ssh_agent-rmheaders Source5: pam_ssh_agent-rmheaders
Patch100: openssh-5.6p1-wIm.patch Patch100: openssh-5.8p1-wIm.patch
Patch0: openssh-5.6p1-redhat.patch Patch0: openssh-5.6p1-redhat.patch
#https://bugzilla.mindrot.org/show_bug.cgi?id=1402 #https://bugzilla.mindrot.org/show_bug.cgi?id=1402
Patch1: openssh-5.8p1-audit1.patch Patch1: openssh-5.8p1-audit1.patch
Patch2: openssh-5.8p1-audit2.patch Patch2: openssh-5.8p1-audit2.patch
Patch102: openssh-5.8p1-audit2a.patch
Patch3: openssh-5.8p1-audit3.patch Patch3: openssh-5.8p1-audit3.patch
Patch4: openssh-5.8p1-audit4.patch Patch4: openssh-5.8p1-audit4.patch
Patch5: openssh-5.8p1-audit5.patch Patch5: openssh-5.8p1-audit5.patch
Patch105: openssh-5.8p1-audit5a.patch
#https://bugzilla.mindrot.org/show_bug.cgi?id=1640 #https://bugzilla.mindrot.org/show_bug.cgi?id=1640
Patch9: openssh-5.8p1-vendor.patch Patch9: openssh-5.8p1-vendor.patch
# --- pam_ssh-agent --- # --- pam_ssh-agent ---
@ -286,9 +288,11 @@ The module is most useful for su and sudo service stacks.
%patch0 -p1 -b .redhat %patch0 -p1 -b .redhat
%patch1 -p1 -b .audit1 %patch1 -p1 -b .audit1
%patch2 -p1 -b .audit2 %patch2 -p1 -b .audit2
%patch102 -p1 -b .audit2a
%patch3 -p1 -b .audit3 %patch3 -p1 -b .audit3
%patch4 -p1 -b .audit4 %patch4 -p1 -b .audit4
%patch5 -p1 -b .audit5 %patch5 -p1 -b .audit5
%patch105 -p1 -b .audit5a
%patch9 -p1 -b .vendor %patch9 -p1 -b .vendor
%if %{pam_ssh_agent} %if %{pam_ssh_agent}
pushd pam_ssh_agent_auth-%{pam_ssh_agent_ver} pushd pam_ssh_agent_auth-%{pam_ssh_agent_ver}
@ -299,7 +303,9 @@ rm -f $(cat %{SOURCE5})
popd popd
%endif %endif
%patch20 -p1 -b .akc %patch20 -p1 -b .akc
%if %{ldap}
%patch21 -p1 -b .ldap %patch21 -p1 -b .ldap
%endif
%if %{WITH_SELINUX} %if %{WITH_SELINUX}
#SELinux #SELinux
%patch22 -p1 -b .selinux %patch22 -p1 -b .selinux
@ -604,6 +610,9 @@ fi
%endif %endif
%changelog %changelog
* Thu Feb 17 2011 Jan F. Chadima <jchadima@redhat.com> - 5.8p1-4 + 0.9.2-30
- improve audit of server ket management
* Wed Feb 16 2011 Jan F. Chadima <jchadima@redhat.com> - 5.8p1-3 + 0.9.2-30 * Wed Feb 16 2011 Jan F. Chadima <jchadima@redhat.com> - 5.8p1-3 + 0.9.2-30
- improve audit of logins and auths - improve audit of logins and auths