bash 기록을 syslog로 보내기

bash 기록을 syslog로 보내기

Bash 버전 4.N은 시스템 로그에 명령 기록을 기록할 수 있는 것으로 보이지만 이 기능을 구성하는 방법에 대한 정보를 찾을 수 없습니다.

, 및 트랩을 사용하여 해킹을 제공하는 몇 페이지를 읽었으며 PROMPT_COMMAND사용 가능한 패치가 있다는 것을 알고 있지만 이제 내장되어 있으므로 이것이 필요하지 않습니다.

캡처 명령을 사용할 수 있다는 것을 알고 있지만 auditdbash/syslog 조합을 사용하고 싶습니다.

답변1

이 접근 방식이 정확히 당신이 찾고 있는 것 같습니다. 이에 대해서는 다음 제목의 기사에서 설명합니다.Bash 포렌식 기능 향상.

발췌:

그와 이 주제를 논의하면서 저는 법의학 조사를 개선하기 위해 명령 기록을 세부적으로 조정할 수 있는 방법이 있다는 것을 깨달았습니다. 2009년에도 글을 썼습니다.블로그Bash의 게시물은 Bash 명령 기록을 원격 Syslog 서버로 보내는 몇 가지 아이디어를 제공합니다. 내 웹 로그를 확인해 보니 이 블로그 게시물이 지난 30일 동안 1000회 이상의 방문을 기록하며 여전히 인기를 끌고 있습니다! 내 블로그 게시물은 오래되었습니다. Bash는 버전 4.1부터 기본적으로 Syslog를 지원하지만 대부분의 배포판에서는 활성화되어 있지 않습니다. 이 기능을 사용하려면 셸을 다시 컴파일해야 합니다.

나는 이것이 그다지 편리하지 않다고 생각하지만, 장점은 사용자가 이를 비활성화할 수 없다는 것입니다(쉘을 다른 쉘이나 다른 Bash 바이너리로 전환하지 않는 한). config-top.h에 "SYSLOG_HISTORY"를 정의하기만 하면 됩니다.

$ vi config-top.h
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
#  define SYSLOG_FACILITY LOG_USER
#  define SYSLOG_LEVEL LOG_INFO
#endif

./configure
make install

따라서 이 기능은 Bash 4.1+에서 사용할 수 있지만 가장 널리 사용되는 배포판에서는 기본적으로 Bash로 컴파일되지 않을 수 있습니다.

주어진 Bash가 어떤 옵션으로 컴파일되었는지 확인할 수 있는 방법을 찾지 못했기 때문에 이 질문에 대답하려면 .specBash RPM을 빌드할 때 사용된 업스트림 파일(예: Redhat 배포판)을 살펴보는 것이 좋습니다. Debian 기반 배포판에서도 사용할 수 있습니다.

확인을 위해 .specCentOS 7.2.1511과 함께 제공된 Bash 파일을 살펴봤지만 이 기능을 활성화하지 않습니다.

$ grep configure bash.spec
%configure --with-bash-malloc=no --with-afs
- Use the configure macro instead of calling ./configure directly

나만의 RPM을 굴려보세요

위 세부 사항의 요지를 기반으로 나만의 Bash를 구축하기 위해 취한 단계는 다음과 같습니다.

소스 다운로드 및 설치

시작하나 다운로드했어요소스 속도(SRPM)CentOS 7.x용 배시. 다운로드한 후 내 rpmbuild디렉토리 에 설치했습니다 .

$ rpmdev-setuptree
$ rpm -ivh bash-4.2.46-20.el7_2.src.rpm
수리하다

파일이 rpmbuild/SPEC& 로 추출됩니다 rpmbuild/SOURCES. 이제 tar.gz다음 단계를 사용하여 압축이 풀린 Bash 파일의 내용을 복사합니다.

$ cd rpmbuild/SOURCES
$ tar zxf bash-4.2.tar.gz
$ cp -prf bash-4.2 bash-4.2-orig
$ cd bash-4.2

편집하여 rpmbuild/SOURCES/bash-4.2/config-top.h다음과 같이 만드세요.

/* Define if you want each line saved to the history list in bashhist.c:
   bash_add_history() to be sent to syslog(). */
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
#  define SYSLOG_FACILITY LOG_LOCAL1
#  define SYSLOG_LEVEL LOG_DEBUG
#endif

함수를 편집 하고 다음과 같이 rpmbuild/SOURCES/bash-4.2/bashhist.c만드세요 .bash_syslog_history

void
bash_syslog_history (line)
     const char *line;
{
  char trunc[SYSLOG_MAXLEN];

  if (strlen(line) < SYSLOG_MAXLEN)
    syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d USER=%s CMD=%s", getpid(), current_user.uid, current_user.user_name, line);
  else
    {
      strncpy (trunc, line, SYSLOG_MAXLEN);
      trunc[SYSLOG_MAXLEN - 1] = '\0';
      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d USER=%s CMD(TRUNCATED)=%s", getpid(), current_user.uid, current_user.user_name, trunc);
    }
}

이제 .patch두 파일에 대한 변경 사항이 포함된 파일을 생성합니다.

$ cd $HOME/rpmbuild/SOURCES
$ diff -Npru bash-4.2-orig bash-4.2 > bash_history_rsyslog.patch

$HOME/rpmbuid/SPEC/bash.spec다음 줄을 SPEC 파일의 적절한 위치에 추가 합니다.

# history syslog
Patch144: bash_history_rsyslog.patch
...
...
%patch144 -p1 -b .history_rsyslog
세워

이제 빌드하세요.

$ cd $HOME/rpmbuild/SPEC
$ rpmbuild -ba bash.spec

빌드의 끝은 다음과 같습니다.

...
Processing files: bash-debuginfo-4.2.46-20.el7.centos.x86_64
Provides: bash-debuginfo = 4.2.46-20.el7.centos bash-debuginfo(x86-64) = 4.2.46-20.el7.centos
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/vagrant/rpmbuild/BUILDROOT/bash-4.2.46-20.el7.centos.x86_64
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-4.2.46-20.el7.centos.x86_64.rpm
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-doc-4.2.46-20.el7.centos.x86_64.rpm
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-debuginfo-4.2.46-20.el7.centos.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.nGworU
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd bash-4.2
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/bash-4.2.46-20.el7.centos.x86_64
+ exit 0
설치하다

완료되면 생성된 RPM을 설치할 수 있습니다.

$ sudo rpm -ivh --force $HOME/rpmbuild/RPMS/x86_64/bash-4.2.46-20.el7.centos.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:bash-4.2.46-20.el7.centos        ################################# [100%]
rsyslog 구성

이제 rsyslog /etc/rsyslog.conf구성을 수정합니다.

$ sudo vim /etc/rsyslog.conf
...
...
$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514

...
...

#### 전역 지침####
$template IpTemplate,"/var/log/bash-log/%FROMHOST-IP%.log"
*.* ?IP 템플릿
&~

...
...

그런 다음 Rsyslog를 다시 시작하십시오.

$ sudo systemctl restart rsyslog
테스트 및 확인

이제 새로운 Bash 인스턴스를 루트로 실행하고 몇 가지 명령을 실행하세요.

$ sudo -Es
$ ls

그리고 로그 파일을 추적합니다 /var/log/bash-log/127.0.0.1.log.

$ tail /var/log/bash-log/127.0.0.1.log
2018-07-19T23:23:37.568131-04:00 centos7 bash: HISTORY: PID=12511 UID=1000 USER=vagrant CMD=sudo -Es
2018-07-19T23:23:37.573825-04:00 centos7 sudo: vagrant : TTY=pts/0 ; PWD=/home/vagrant/rpmbuild/SOURCES ; USER=root ; COMMAND=/bin/bash
2018-07-19T23:23:37.589258-04:00 centos7 systemd-logind: Got message type=signal sender=org.freedesktop.DBus destination=n/a object=/org/freedesktop/DBus interface=org.freedesktop.DBus member=NameOwnerChanged cookie=4454 reply_cookie=0 error=n/a
2018-07-19T23:23:37.590633-04:00 centos7 dbus[588]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
2018-07-19T23:23:37.590806-04:00 centos7 dbus-daemon: dbus[588]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
2018-07-19T23:23:37.592160-04:00 centos7 dbus[588]: [system] Activated service 'org.freedesktop.problems' failed: Failed to execute program /lib64/dbus-1/dbus-daemon-launch-helper: Success
2018-07-19T23:23:37.592311-04:00 centos7 dbus-daemon: dbus[588]: [system] Activated service 'org.freedesktop.problems' failed: Failed to execute program /lib64/dbus-1/dbus-daemon-launch-helper: Success
2018-07-19T23:23:37.602174-04:00 centos7 systemd-logind: Got message type=signal sender=org.freedesktop.DBus destination=n/a object=/org/freedesktop/DBus interface=org.freedesktop.DBus member=NameOwnerChanged cookie=4455 reply_cookie=0 error=n/a
2018-07-19T23:23:38.520300-04:00 centos7 bash: HISTORY: PID=12585 UID=0 USER=root CMD=ls
2018-07-19T23:23:49.210406-04:00 centos7 bash: HISTORY: PID=12585 UID=0 USER=root CMD=tail /var/log/bash-log/127.0.0.1.log

CMD=...이 로그에 몇 줄이 표시되어 있습니까 ? 방금 실행한 명령은 ls& 입니다 tail.

사전 구축?

이 문제를 겪고 있는 사람들을 돕기 위해 나는 Copr의 수정 사항을 사용하여 Bash RPM을 자유롭게 구축했습니다.

관련 정보