root 계정에 데몬을 돌려 각 사용자의 접속시간, 실행한 명령어, 파일접근을 알아내는 방법

yshkorea의 이미지

관리자 계정으로 데몬을 돌려놓고

각 사용자가 접속하고, 명령을 실행하고, 파일에 접근하는것을

모니터링해서 기록하려고 합니다.

로그파일로 기록되는 것도 있겠지만 로그파일을 사용하면 조작가능성이 있기때문에

안될거 같고..

프로그래밍 통해 가능하게 해야할거 같은데요...

어떤 방법으로 해야하죠??

윈도우즈 프로그래밍만 하다가 리눅스처음 접하게됐는데..

방법이 만만치 않네요^^

ymir의 이미지

로그 파일이라도 시스템 로그라면 root 외에는 편집할 수는 없다는 건 아실테고.. 이게 수정 가능하다는 얘기는 파일, 프로세스 등에 모두 접근 가능한 권한을 갖고 있다는 얘기겠네요. 어차피 로그를 로컬 시스템에 남긴다면 어떻게든 찾아서 수정 가능할테니, 외부 로그 서버를 두고 syslog 를 통해 전송하던가 하는 식이면 어느 정도 효과는 있겠네요. (물론 syslog 죽이거나 설정 변경하면 무용지물...)

접속(login/logout) 은 PAM 의 session 모듈에서 체크 가능하니, PAM 모듈 하나 작성하시는게 빠를 것 같네요. login/logout 시에 session open/close 가 떨어지는데 해당 데몬이나 syslog 로 바로 로그 전송하면 될 듯.. (단, PAM 인증을 사용하지 않는 접속은 체크 안 됨)

사용자 명령 모니터링은 pacct 로그를 생성하도록 해서, 이 파일을 모니터링 하면 일단 로그는 수집 되긴 하는데... 쉘 환경에서 수행되는 온갖 명령들이 다 로깅되고, 길이도 8자(였던가?) 정도로 작아서, 실행 argument 까지 추적하기는 어려울겁니다. (man lastcomm, acct, accton 등...)

끝으로.. 파일 접근(read, write, create, unlink, ..) 감사에 관한 것은, Linux 에도 Solaris 의 BSM 같이 별도의 감사 도구가 있는지 모르겠습니다만, 해당 벤더의 제품중에 감사 기록을 남길 수 있는 모듈이 있는지 찾아 보시는게 나을 것 같네요. 그걸 코딩으로 구현하신다면.. 시스템 콜을 hooking 하는 모듈이 필요할 것 같네요..;;;

결과적으로 이런 것들을 지원해주는 상용 제품들이 있습니다. SecureOS 들이 기존의 Anti-hacking, 접근 통제에서 시스템 자원 관리 기능으로 확대되어 가고 있는 추세라.. 요즘은 대부분 로그인 세션 추적, 접속 통제, 명령어 실행 통제, 파일 접근 제어 및 감사, 실시간 시스템 로그 감시 등을 지원해 줍니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

yshkorea의 이미지

utmp/wtmp 라는것이 있던데
이것을 이용하면 간단히 될까요??

그리고 파일접근 같은경우 시스템 콜을 후킹해서 처리하면 되고...

로그파일로 진행해야겠네요..ㅜ.ㅜ
위에 말씀대로라면 상당히 어려운 프로젝트가 될듯하네요..ㅜ.ㅜ

"yshkorea" 죽을만큼 노력했는가? 그만큼 간절했는가?

ymir의 이미지

제가 너무 쉽게 댓글을 단 것 같군요... ;;

제 생각에는.. 시스템 모니터링에 관련된 공개도구가 있는지, 해당 OS 에서 별도로 ACL 이나 감사 기록을 지원하는 패키지가 있는지 확인해 보시는게 우선일 것 같습니다.
만약 OS 가 변경가능하다면, 지금쯤이면 Asianux 에 RedCastle(위에서 말한 SecureOS) 가 탑재되었을텐데, SecureOS 를 별도 설치 하지 않으신다면, 보안 기능을 지원하는 OS로의 교체도 한번 고려해 보시구요.

직접 개발을 해야 하는 상황이라면...;;
구현 범위나 한계를 명확히 하지 않으면 말씀드리기가 어렵겠네요.
나름 생각하는 정석(?) 대로라면, PAM+커널모듈 조합이면 위의 모든 기능을 다 할 수 있다고 보는데, 이는 고려해야 할 상황이 한 둘이 아니라, 설계하기가 조금(!!) 까다롭습니다.

그나마 login/logout 정도라면, PAM 의 pam_unix.so 모듈에서 session 관리 모듈을 그대로 갖다 쓰거나, 시스템 로그 파일 등을 이용해서 처리할 수는 있습니다.
utmp(utmpx) 는 현재 로그인된 세션에 대한 기록파일이고, wtmx(wtmpx) 는 로그인 이력에 대한 로그입니다. w 명령이 utmp 를 참조하고, last 명령이 wtmp 를 참조하죠.
wtmp 파일을 모니터링 하는 것으로도 login/logout 은 가능합니다. (대신 flag 를 잘 봐야.. ;;)
(대신 파일을 계속해서 검사해야 하는 오버헤드는 어쩔 수 없죠)

PAM 의 pam_unix.so 모듈에서 session 관리 모듈은 login session 의 open/close 에 대한 로그를 남기는 모듈입니다.
(syslog 에서 'session opened for user 어쩌구..' 류의 로그를 얘가 남깁니다)
Linux-PAM 의 pam_unix 모듈에서 pam_sm_open_session/pam_sm_close_session 소스를 보시면 됩니다.
(이미 소스가 있으니.. 제일 간단한? 방법.. ;;)

혹시 다른 경험있는 분들도 계실테니, 좀 더 자료를 찾아 보시고 개발 여부를 결정하시는게 좋겠네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

select99의 이미지

로그파일 조작가능하다니요?
이미 보안이뚤렸다는뜻인가요?
보안패키지 개발해서 팔것이 아니라면..
OS 재설치해서 보안패치하시는게 맞지 않을까요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.