5.6. Logging

During a user session, suSSHi creates three different kinds of log files.

5.6.1. System Log

The system log is a central log in which all system messages of all suSSHid daemons are recorded. Messages vary from received connections and user login attempts to basic system messages like daemon startup. As specified in the configuration SystemLogFile, system messages are written to the local file system.

Path variables

The path specified under SystemLogFile may contain the following tokens that are expanded at runtime once the user has been authenticated at the gateway:

Token

Description

%d

Day of month (01 … 31

%m

Month (01 … 12)

%y

Year (2019 …)

Note

The default path within the containers is /var/log/susshi/system/%y/%m/%d/system.log.

All system log messages are forwarded to Syslog as well. The Syslog facility used for this messages can be set by the configuration file option SystemLogFacility. The default facility is AUTH.

Please refer to the Partitions section for further details.

5.6.2. Session Logs

The session logs are individual logs per suSSHi user session and contain some details about what SSH protocol features the user is making use of, what channels have been opened and closed and whether the requested features have been either accepted or denied by suSSHi, etc. The system messages are written to the local file system as specified in the configuration SessionLogFile.

Path variables

The path may contain the following tokens that are expanded at runtime once the user has been authenticated at the gateway:

Token

Description

%d

Day of month (01 … 31

%m

Month (01 … 12)

%y

Year (2019 …)

%t

Target ip address

%u

Gateway user ID

%s

suSSHid session identifier

Note

The default path within the containers is /var/log/susshi/sessions/%y/%m/%d/%t/%u-%s.log.

Each entry in the session log is prefixed with the time of the event, the gateway user, client IP address, target user, target hostname and target IP address in the following form:

<time> susshid[<pid>]: <gateway_user>@<client_ip> ==> <target_user>@<target_host> (<target_ip>):

With this prefix it is very easy to grep through a bunch of log files and find the session you are looking for.

All session log messages are forwarded to Syslog as well. The Syslog facility used for this messages can be set by the configuration file option SessionLogFacility. The default facility is AUTH.

Please refer to the Partitions section for further details.

5.6.3. Audit Logs

The audit logs are the most advanced logs in suSSHi. They provide a detailed insight of what a user has done during a session, including full logging of interactive and command exec sessions in both directions:

  • the target server’s output, which contains all the data a server sends to the client, including the characters the user has typed unless echo has not been turned off on server side

  • the client user input, which contains any single keystroke typed by the user.

Furthermore, file transfers using SCP or SFTP can be logged so that it is clear which files have been touched and in which way during the file transfer session. Other logging like libpcap dumps of the forwarded IP traffic over a port forwarding channel or X11 session logs are available as well. Not all audit log files are ASCII readable but need some additional software to be read.

To understand audit logging, it is important to know that in a single SSH session, multiple channels can be requested by either the client or the target, and each channel can be of a different type. For example, the user can start an interactive login to a server and receive a shell I/O channel, but next request X11 or port forwarding or SFTP file transfer within the same SSH session, but on different channels.

To obtain a complete and detailed log of an SSH session, suSSHi examines each of these channels and logs the requests and traffic depending on what function the channel is used for. An interactive session results in some sort of ASCII logging of server output and user input, an SFTP protocol leads to a detailed logging of what the user has done within SFTP, etc.

Path variables

Audit messages are written to the local file system as specified in the configuration AuditLogFile. The path may contain the following tokens that are expanded at runtime once the user has been authenticated at the gateway:

Token

Description

%d

Day of month (01 … 31

%m

Month (01 … 12)

%y

Year (2019 …)

%t

Target ip address

%u

Gateway user ID

%s

suSSHid session identifier

%f

File type

Note

The default path within the containers is /var/log/susshi/audit/%y/%m/%d/%t/%u-%s.%f.

The file type (%f token) is expanded as shown in the following table. The %f token must be specified otherwise reading the configuration file will fail.

Type

Data Source

Format

Description

agent

Client & Target

ASCII, line by line

Auth Agent logging

client

Client

ASCII

Client input logging

log

Any

ASCII, line by line

Standard logfile

pcap

Client & Target

Binary (PCAP)

Packet capture file used by many utilities like tcpdump, wireshark etc.

scp

Client & Target

ASCII, line by line

SCP Logging

session

Target

ASCII

Server output logging

sftp

Client & Target

ASCII, line by line

SFTP Logging

time

Client & Target

ASCII

Timing file for server output and client input logging

x11

Client & Target

Binary (PCAP)

X11 data logging in PCAP format

Please refer to the Partitions section for further details.

5.6.3.1. Audit Logging in Detail

With suSSHi it is possible to log all kinds of different SSH protocol features in the file system according to the protocol. The different protocol characteristics require suitable log file formats to write the output files for later analysis. The audit log files are (usually) not typical log files with line-by-line events, but special files.

5.6.3.1.1. Interactive Session Logging

Server Output

If a user logs on to a target server and no optional command is specified by the user, a default interactive shell runs on the remote server. If the client specified a command but requested a PTY (for example, with the -t option in the OpenSSH ssh client), audit logging also becomes this type of session logging.

The interactive logging of the session server output generates two files:

  • The first file contains all output sent by the server without filtering or losing a single character.

  • The second file contains time information about the server output.

This allows the output of the server session to be reproduced 100% in the correct order and at the correct time since the data originally arrived.

Client Input

In the server output log (see above), only the output generated by the server is logged. So if the terminal is set to “no output” (e.g. when entering a password or forced by the user by sending the corresponding terminal control sequences), no output is included in the server output logs. To obtain all data entered by the user, client input logging can be enabled by setting the appropriate logging mask.

In the interactive session client input log, suSSHi also generates two different files:

  • One with the input entered by the user

  • One with the timing information as described above.

If server output logging is also enabled, the time information together with the server output timing go to the same time file.

5.6.3.1.2. Remote Command Execution

Whenever a user instructs his SSH client to execute a remote command at login (e.g. ssh gwuser@root@server@susshi shutdown -h now), suSSHi inspects the session as an exec session instead of an interactive session. Since execution sessions are very often used for remote file copying, and this could naturally fill a journaling file very quickly (think of an user copying an entire DVD by using a tar or cpio pipe over an SSH session), it is important to have a different journaling strategy for the data transferred over these sessions. Only when browsing the command to be executed on the target, it is simply impossible for suSSHi to guess whether the resulting data should be logged or simply ignored to save disk space.

The remote command logging algorithm looks like this:

  • When suSSHi receives a PTY request, the logging is converted to standard interactive session logging, since we now have some kind of interactive I/O that requires a PTY. The user can also request a PTY when executing remote commands (e.g. with the -t option in OpenSSH’s ssh client). This is sometimes done to run a preferred user shell instead of the default user shell in the user profile (e.g. ssh -t gwuser@root@server@susshi bash).

  • If the remote command is a form of SCP call, the logging is converted to SCP logging (see below).

  • If the remote command is retrieved from the user-definable stop patterns (see the Execution Stop Pattern in Partitions configuration), no audit log of the session is performed. It can be very helpful for the administrator to observe the session logs from time to time to look for patterns that need to be added to the configuration to save disk space by logging large file transfers.

  • In all other cases, suSSHi always logs the number of bytes configured with the exec log max-size (see Partitions) and then stops logging to save disk space. If the value is not set, 200MB is the default.

5.6.3.1.3. SFTP

All SCP traffic is analyzed in its function and logged in a human-readable log file. The SCP protocol is very restrictive in the supported functions: a file can be copied or a directory (which is always a recursive copy). There are no functions like file deletion, etc. that you can find in SFTP. To enable SCP audit logging, the logging mask must be set accordingly.

5.6.3.1.4. Port Forwarding

Any port forwarding, whether local or remote, can only transfer TCP traffic. If the logging mask is set accordingly, all traffic on the forwarded port is logged into a libpcap-compatible packet capture which can be read with any software such as tcpdump or Wireshark that can read libpcap-formatted files.

Since the port forwarding within the SSH protocol is ultimately only a bidirectional data stream (socket IO), the actual IP addresses of the endpoints communicating over these sockets cannot be determined. Therefore, always check the session log and be careful when using IP addresses and ports in forensics without performing a thorough traffic analysis.

For output in PCAP format, the IP addresses are therefore always set to 1.1.1.1 for the client side and 2.2.2.2 for the target side. By the way, this also applies if IPv6 is actually used to access the socket.

5.6.3.1.5. X11

X11 logging is essentially the same as standard port forwarding logging. Traffic is logged in a libpcap-compatible file with the X11 file type set. The same applies for IP addresses as for standard port forwarding. The port is always set to 6000, regardless of which display the X server is running on.

The X11 libpcap files can be read by any software that can read libpcap files for further analysis.