SLACK으로 SSH 로그인 알림 확인

    서버를 운영하면서 가장 무서운 일은 허가되지 않은 인원이 운영하는 서버에 몰래 접근하여 어떠한 작업을 한다는 것이다.
    아무리 보안에 신경을 쓴다고 해도 보안 문제는 쉽게 해결이 되지 않기 때문에 해당 부분에 대해서 누군가 로그인을 한다면 해당 부분에 대한 알림을 통해서 허가 받은 인원이 작업을 하고 있다는 사실을 알기 위해서 슬랙을 통한 알림을 설정한다.

    Slack으로 알림을 주기 위한 Web Hook 쉡 스크립트

    #!/bin/sh
    
    url="https://hooks.slack.com/services/XXX/YYY/ZZZ" # 슬랙 WebHook으로 설정한 URI
    channel="#ssh" # 알림을 받을 SLACK CHANNEL
    icon=":dark_sunglasses:" # 알림을 보내는 아이콘 설정
    host="`hostname`"
    
    if [ "$PAM_TYPE" != "close_session" ]; then
    content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGIN: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGIN TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
    curl -X POST --data-urlencode \
          "payload={
            \"channel\": \"$channel\",
            \"mrkdwn\": true,
            \"username\": \"SSH_MONITOR\",
            $content,
            \"icon_emoji\": \"$icon\"
        }" $url &
    fi
    
    if [ "$PAM_TYPE" == "close_session" ]; then
    content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGOUT: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGOUT TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
    curl -X POST --data-urlencode \
          "payload={
            \"channel\": \"$channel\",
            \"mrkdwn\": true,
            \"username\": \"SSH_MONITOR\",
            $content,
            \"icon_emoji\": \"$icon\"
        }" $url &
    fi
    

    스크립트 생성 후 실행 권한 부여

    sudo chmod +x /etc/ssh/scripts/ssh_notify_to_slack.sh
    

    SSH 로그인시 알림을 실행하기 위한 PAM 등록

    SSH의 접속에 대한 세션 샅애값이 변경될 때 알림을 주기 위해서 pam_exec.so를 활용하여 SlackWeb Hook으로 알림을 준다.

    sudo echo "session optional pam_exec.so seteuid /etc/ssh/scripts/ssh_notify_to_slack.sh" >> /etc/pam.d/sshd
    

      SSO(Single Sign On) 종류

      SSO(Single Sign On)이란

      • 다수의 서비스를 한 번의 Login으로 기업의 업무 시스템이나 인터넷 서비스에 접속할 수 있도록 해 주는 보안 시스템
      • 중앙집중형 접근 관리, 보안 기능 PKI(Public Key Infrastructure), 암호화 기능

      SSO 종류

      Delegation 방식

      대상 애플리케이션의 인증 방식을 변경하기 어려울 때 많이 사용한다.
      대상 애플리케이션의 인증 방식을 전혀 변경하지 않고, 사용자의 대상 애플리케이션 인증 정보를 에이전트가 관리해 사용자 대신 로그온해 주는 방식이다.

      Propagation 방식

      통합인증을 수행하는 곳에서 인증을 받아 대상 애플리케이션으로 전달할 토큰을 발급받는다.
      대상 애플리케이션에 사용자가 접근할 때 토큰을 자동으로 전달해 대상 애플리케이션이 사용자를 확인할 수 있도록 하는 방식이다. 웹 환경에서 쿠키라는 기술을 이용해 토큰을 자동으로 대상 애플리케이션에 전달할 수 있다. 이러한 웹 환경의 이점으로 웹 환경에서의 SSO는 대부분 이 모델을 채택하고 있다.

      Delegation & Propagation 방식

      웹 환경이라고 하더라도 Propagation 방식이 모두 적용될 수는 없다.
      특히 웹 애플리케이션의 변경이 전혀 불가능하고 사용자 통합이 어려운 경우 Delegation 방식을 사용하게 된다. 또한, 대상 애플리케이션들이 많이 있고 애플리케이션의 특성들이 다양한 경우 각 애플리케이션에 Delegation 방식과 Propagation 방식을 혼용해서 전체 시스템의 SSO를 구성한다.

      Web 기반 One Cookie Domain SSO

      SSO 대상 서비스와 애플리케이션들이 하나의 Cookie Domain 안에 존재할 때 사용된다.
      일반적인 기업 내부의 컴퓨팅 환경이다. 통합인증을 받은 사용자는 토큰을 발급받게 되고, 이 토큰은 Cookie DomainCookie로 설정되어 Cookie Domain 내의 다른 서비스로 접근할 때 자동으로 토큰을 서비스에 제공하게 된다. 서비스에서 동작하는 SSO 에이전트는 토큰으로부터 사용자 신원을 확인하고 요청된 자원에 대한 접근을 허가해 준다.

      출처 : 이기적 정보보안기사/산업기사 필기 이론서(영진출판사)