Unix 보안

Unix security

Unix 보안이란 Unix 또는 Unix유사한 운영체제보호하는 방법을 말합니다.이러한 operating system의 설계 컨셉 뿐만이 아니라, 유저관리의 엄격한 실천에 의해서도 시큐어한 환경을 실현할 수 있습니다.

디자인 컨셉

권한

이러한 시스템의 핵심 보안 기능은 파일 시스템 권한입니다.일반적인 Unix 파일 시스템의 모든 파일에는 파일에 대한 다른 액세스를 가능하게 하는 권한 세트가 있습니다.

파일에 대한 권한은 일반적으로 chmod 명령을 사용하여 설정되며 ls 명령을 통해 확인할 수 있습니다.예를 들어 다음과 같습니다.

-r-xr-xr-x 1 루트휠 745720 2002년 9월 8일 /bin/sh

Unix 권한은 다른 사용자가 파일에 액세스할 수 있도록 허용합니다.사용자 그룹마다 파일에 대한 사용 권한이 다릅니다.

보다 고도의 Unix 파일시스템에는 접근컨트롤 리스트 개념이 포함되어 있어 여러 사용자 또는 그룹에 권한을 부여할 수 있습니다.접근 제어 목록을 사용하여 추가 개별 사용자 또는 그룹에 권한을 부여할 수 있습니다.예를 들어 다음과 같습니다.

/syslogr [u:rwx, g::r-x, o:r-x/u:rwx, u:syslog:rwx, g::r-x, m:rwx, o:r-x]

이 예에서는 Linux 운영 체제의 chacl 명령에서 가져온 것입니다.사용자 sue에는 /pvr 디렉토리에 대한 쓰기 권한이 부여됩니다.

사용자 그룹

Unix 스타일 운영 체제 사용자는 특정 액세스 권한을 가진 관리되는 그룹에 속합니다.이를 통해 사용자는 이 시스템에 대한 액세스 수준에 따라 그룹화할 수 있습니다.많은 Unix 실장에서는 사용자가 Wheeluser 권한 그룹의 멤버여야 액세스 할 수 있으므로 보안 레이어가 추가됩니다.su명령어를 [1]입력합니다.

루트 액세스

대부분의 Unix 및 Unix 유사 시스템에는 사용자가 시스템을 완전히 제어할 수 있는 계정 또는 그룹이 있습니다.이 계정 또는 그룹은 루트 계정이라고도 합니다.원치 않는 사용자가 이 계정에 액세스하면 시스템이 완전히 침해됩니다.단, 루트 계정은 관리 목적으로 필요하며, 위의 보안상의 이유로 루트 계정은 일상 용도로 거의 사용되지 않습니다(sudo 프로그램이 더 일반적으로 사용되므로 루트 계정의 사용을 보다 면밀하게 모니터링할 수 있습니다.

루트 액세스는 슈퍼맨 스토리에 익숙한 사용자가 다음과 같이 유추하여 시각화할 수 있습니다.

루트 계정을 사용하는 것은 슈퍼맨이 되는 것과 같습니다.관리자의 일반 사용자는 Clark Kent에 가깝습니다.클라크 켄트는 사람들을 구하기 위해 필요한 만큼만 슈퍼맨이 된다.그리고 나서 그는 그의 "변명"으로 돌아간다.루트 액세스는 같은 방법으로 사용해야 합니다.하지만 클라크 켄트 변장은 그를 제한하지는 않는다. 왜냐하면 그는 여전히 초능력을 사용할 수 있기 때문이다.이것은 sudo 프로그램을 사용하는 것과 유사합니다.

사용자 및 관리 기술

Unix 에는, 유저와 관리자가 적절히 사용하는 경우, 시큐러티를 향상시킬 수 있는 툴이 다수 있습니다.

패스워드

강력한 비밀번호를 선택하고 적절히 보호하는 것이 Unix 보안을 강화하기 위해 사용자가 할 수 있는 가장 중요한 작업일 것입니다.Unix 시스템에서는 사용자에 대한 필수 정보가 파일 아래에 저장됩니다./etc/passwd이 파일은 시스템에 등록된 사용자와 해당 사용자의 기본 정의를 추적합니다.패스워드, 즉 패스워드의 해시도 같은 장소에 보존할 수 있습니다.의 엔트리/etc/passwd각 행에 정확히 1개씩 배치하고 다음 형식을 취합니다.

닉네임: password_hash: UserID: GroupID: Complete_Name: home_dir: shell_bin

예를 들어 다음과 같습니다.

xfze: $1zuW2nX3sslp3qJm9MYDglEApAc36r/:1000:100:다니엘 에르네스토 오르티스 코스타:/home/xfze:/bin/bash

모든 사용자는 에 대한 읽기 액세스 권한이 있어야 합니다./etc/passwd많은 일반적인 작업을 수행할 수 있습니다(ls -l /home사용하다/etc/passwd예를 들어 UID를 로그인 이름에 매핑하는 경우)를 사용하면 누구나 다른 사용자의 비밀번호 해시를 읽을 수 있습니다.이 문제를 해결하기 위해 파일은/etc/shadow는 패스워드 해시를 저장하기 위해 작성되었으며, 읽기 액세스 권한이 있는 은 루트뿐입니다.패스워드 쉐도우잉에서는 두 번째 필드(패스워드 해시)는 'x'로 대체되며, 이 경우 시스템은 이 필드를 통해 대응하는 사용자의 패스워드를 취득하도록 지시합니다./etc/shadow파일.

/etc/shadow파일에는 보통 처음 두 필드의 값만 포함되어 있습니다.

xfze: $1zuW2nX3sslp3qJm9MYDglEApAc36r/::::

의 나머지 필드/etc/shadow파일에는 다음이 포함됩니다.

  1. 비밀번호 변경 간격 최소 일수
  2. 암호를 변경해야 하는 최대 일 수
  3. 암호를 변경할 때까지의 경고 기간(일 수)
  4. 계정을 사용할 수 없게 되었을 때 암호를 변경해야 하는 일수
  5. 계정이 만료된 날짜(1970년 1월 1일 이후 일수로 표시됨)

이러한 필드를 사용하여 암호 보안 정책을 적용하여 UNIX 보안을 강화할 수 있습니다.

사용자 및 계정

관리자는 오래된 계정을 즉시 삭제해야 합니다.

  • su, sudo, ssh만, 리모트루트 로그인 없음

소프트웨어 유지보수

패치 적용

모든 소프트웨어와 마찬가지로 운영체제에도 수정이 필요한 버그가 있거나 새로운 기능이 추가되어 확장될 수 있습니다.안전한 방법으로 운영체제에 패치를 적용하려면 신뢰할 수 있는 소스로부터 소프트웨어를 가져와 패키지화된 이후 변경되지 않은 것이 필요합니다.운영체제 패치가 변경되지 않았는지 확인하는 일반적인 방법으로는 SHA-256 기반 체크섬 등의 암호화 해시의 디지털 서명 사용 또는 읽기 전용 미디어의 사용 등이 있습니다.

보안의 관점에서 dpkg 패키지 매니저나 DebianRed Hat Linux의 RPM 패키지 매니저 포맷 등 특정 패키징 방법은 패치 자체의 무결성을 보장하는 기능의 사용만큼 중요하지 않습니다.

소스 배포

소스 배포에는 의심스러운 내용이 있는지 코드를 검사하는 기능이 포함됩니다.단점은 암호화 해시 값이 수반되지 않는 경우 사용자가 코드 자체의 보안 분석을 수행할 수 있어야 한다는 것입니다.

RPM 패키지

기본 기능과 소프트웨어 업데이트를 제공하기 위해 RPM 패키지 매니저 형식을 사용하는 Linux 배포에서는 콘텐츠 무결성보장하기 위해 암호화 해시 및 GPG를 사용합니다.해시 값은 RPM 파일과 함께 패키지화되어 패키지 설치 시 확인됩니다.

데비안 패키지

기본 기능과 소프트웨어 업데이트를 제공하기 위해 Debian .deb 패키지 형식을 사용하는 Linux 배포판은 GPG 서명을 사용하여 콘텐츠 무결성을 보장합니다.시그니처는 패키지가 구성될 때 계산되고 나중에 패키지가 설치될 때 검증됩니다.

기타 벤더 및 디스트리뷰션

벤더나 배포에 관계없이 모든 소프트웨어 배포는 소프트웨어가 정규이며 원래 패키지화된 이후 변경되지 않았음을 확인하는 메커니즘을 제공해야 합니다.

서비스

시스템에 불필요한 시스템소프트웨어를 인스톨 또는 구성하지 말아 주세요.더 이상 필요하지 않은 소프트웨어는 가능하면 완전히 제거해야 합니다.

  • 실행 중인 서비스 식별
    • netstat -na
    • lsof
    • nmap
    • sockstat -4(FreeBSD)

명령어 inetd 및 xinetdrlogin, telnet ftp와 같은 다양한 네트워크 프로토콜의 슈퍼 서버 역할을 합니다.

불필요한 서비스 끄기

  • debian에서의 update-rc.d 사용
  • Red Hat Linux에서 chkconfig 사용
  • FreeBSD에서 /etc/rc.conf 및 /usr/local/etc/rc.d 사용(멘션 /etc/rc.local)
  • Gentoo Linux에서 rc-update 사용

이 접근방식을 보통 프로 액티브보안이라고 부릅니다.기본적으로 안전한 운영 체제가 있습니다.그 중에서도 무료 BSD 플레이버(FreeBSD, NetBSD, OpenB)SD)는, 프로 액티브하게 시큐어.예를 들어, NetBSD 3.0 워크스테이션에서의 netstat 의 출력에서는, 다음의 테크닉의 개요를 명확하게 나타내고 있습니다.

$netstat - a Active Internet connections (서버 포함)Proto Recv-Q Send-Q 로컬주소 상태 tcp 0 localhost.smtp *.* Listen tcp 0 *.ssh *.* Listen Active Internet 6 connections (서버 포함)Proto Recv-Q Send-Q  로컬 주소 tcp6 0 0 localhost.smtp *.* LISTEN tcp6 0 0 *.ssh *.* LISTEN 액티브 UNIX 도메인 소켓주소 타입 Recv-Q Inode Conn Nextref Addr c0d10d80 dgram 0 c0 c08680       0 c0cb7000 -> /var/run/log c0cb7000 dgram 0 0 c0cd8680 0 -> /var/run/log c0cd8680 dgram 0 cb9639e8 0 c0d10d80 0 /var/run/log

다음으로 BSD 시스템의 예를 나타냅니다.

$sockstat - 4 USER 명령어 PID FD PROTO LOCAL ADDRESS FORENAL ADDRESS 루트 송신 메일 569 4 tcp localhost.smt *.*.* root sshd 593 4 tcp *.ssh *.*

에, 이 머신에서는 SSH 서비스만이 컴퓨터의 모든 퍼블릭네트워크 인터페이스를 리슨 하고 있는 것을 나타냅니다.sendmail루프백인터페이스만을 리슨하고 있습니다.방화벽을 사용하면 서비스에 대한 액세스가 더욱 제한될 수 있습니다.

파일 시스템

파일 시스템 보안

UNIX 및 Unix 유사 시스템 의 파일시스템 보안은 9개의 권한 비트, 설정된 사용자 및 그룹 ID 비트 및 스틱 비트를 기반으로 하여 총 12비트를 지원합니다.이러한 권한은 파일, 디렉토리 및 디바이스와 같은 모든 파일 시스템 개체에 거의 동일하게 적용됩니다.

9개의 허가 비트는 각각3비트의 3개의 그룹으로 나뉩니다.첫 번째 그룹은 파일 소유자의 권한을 기술하고, 두 번째 그룹은 파일에 할당된 GID 권한을 기술합니다. GID는 기본적으로 파일 소유자와 관련된 그룹 또는 파일이 set-GID일 때 파일을 포함하는 디렉토리이며, 세 번째 그룹은 파일이 없는 프로세스와 관련된 권한을 기술합니다.파일과 동일한 사용자 ID를 지정합니다.3비트의 각 그룹에는 읽기, 쓰기 또는 실행 액세스가 허용되었음을 나타내는 비트가 포함되어 있습니다.디렉토리의 경우 execute access는 디렉토리 내에서 파일 검색을 수행할 수 있는 권한으로 해석됩니다.

set 사용자 ID 및 set 그룹 ID 비트(일반적으로 각각 set-UID 및 set-GID 약어)는 이러한 비트 세트 중 하나 또는 양쪽을 가진 파일을 실행하는 프로세스의 ID를 변경하기 위해 사용됩니다.set-UID 권한 비트가 설정된 파일은 해당 파일을 실행하는 프로세스를 통해 일시적으로 유효한 사용자 ID를 파일 소유자의 ID로 전환합니다.set-GID 허가 비트가 설정된 파일은 해당 파일을 실행하는 프로세스를 통해 일시적으로 유효한 그룹 ID를 파일 그룹의 그룹으로 전환합니다.그런 다음 파일로부터 상속된 유효한 사용자 또는 그룹 ID와 사용자가 시스템에 로그온했을 때 상속된 실제 사용자 또는 그룹 ID를 번갈아 사용할 수 있습니다.이를 통해 프로세스가 소유한 액세스 권한을 해당 액세스 권한이 필요한 코드 영역으로 제한할 수 있는 메커니즘을 제공합니다.이것은 권한 분리라고 불리는 보안 기술의 한 형태로 프로세스의 의도하지 않은 액션이나 바람직하지 않은 액션을 제한함으로써 프로그램보안을 향상시킵니다.

set-GID 권한 비트가 설정된 디렉토리는 새로 작성된 파일의 초기 파일 그룹 값이 디렉토리의 파일 그룹과 동일합니다.이를 통해 시스템의 메일 서브시스템과 같은 서브시스템이 공통 파일 그룹 값을 가진 파일을 생성하여 서브시스템 내의 set-GID 프로세스가 파일을 읽거나 쓸 수 있도록 하는 메커니즘을 제공합니다.

스틱 비트(정식적으로는 스왑 비트의 저장 텍스트)는 원래 목적에서 이름을 따왔습니다.원래 스틱 비트는 프로세스의 초기 메모리 이미지를 디스크 드라이브에 연속된 이미지로 저장하여 실제 메모리 페이지를 사용하지 않을 때 이 이미지를 저장하도록 했습니다.이것에 의해, 초기 메모리 이미지를 곧바로 사용할 수 있게 되어, 일반적으로 실행되는 커맨드의 퍼포먼스가 향상되었습니다.현대의 UNIX 시스템에서는 비트가 설정되면 그 기능을 더 이상 수행하지 않지만, 그 이름은 그대로 유지됩니다.파일의 경우 시스템에서 실행되는 파일 잠금 스타일을 나타내기 위해 스틱비트를 사용할 수 있습니다.디렉토리의 경우 스틱비트에 의해 슈퍼 유저 특권을 가지는 프로세스나 파일 소유자의 유효한 유저 ID 를 가지는 프로세스 이외의 프로세스가, 그 디렉토리내의 파일을 삭제할 수 없게 됩니다.스틱 비트는 시스템의 다양한 임시 작업 공간 디렉토리 등 공개적으로 쓰기 가능한 디렉토리에서 가장 일반적으로 사용됩니다.

뿌리박

루트[2][3] 스쿼시는 ID 인증을 사용할 때 리모트슈퍼 사용자(루트) ID의 특별한 매핑입니다(로컬 사용자는 리모트 사용자와 동일합니다).루트 스쿼시에서 클라이언트의 uid 0(root)은 65534(nobody)에 매핑됩니다.주로 NFS의 기능이지만 다른 시스템에서도 사용할 수 있습니다.

루트 스쿼시는 suid 실행 파일 Setuid를 통해 클라이언트머신에서 권한 상승을 회피하는 기술입니다.루트 스쿼시를 사용하지 않으면 공격자는 클라이언트 사용자에게 슈퍼 사용자 권한이 없는 경우에도 서버에서 suid 바이너리를 생성하여 다른 클라이언트에서 루트로 실행할 수 있습니다.따라서 클라이언트 머신을 다른 악의적인 클라이언트로부터 보호합니다.악성 서버(루트가 suid 바이너리를 생성할 수 있음)로부터 클라이언트를 보호하지 않으며 루트 이외의 사용자의 파일(악성 클라이언트가 사용자를 가장할 수 있음)도 보호하지 않습니다.

셀리눅스

SELinux는 제한된 프로세스에서 파일, 폴더, 네트워크 포트 및 기타 리소스에 액세스할 수 있는지 여부와 방법을 엄격하게 정의하여 액세스를 보다 정확하게 제어하기 위한 커널 확장 세트입니다.이 시스템은 사용자보다는 프로세스(데이터베이스, 서버)를 제한하는 데 주로 사용됩니다.또한 루트로 실행되는 프로세스를 제한할 수도 있습니다.다른 배포판에서는 AppArmor와 같은 유사한 대체품을 사용합니다.

바이러스 및 바이러스 스캐너

Unix와 유사한 운영 체제는 일반적으로 Windows에서 실행되도록 만들어진 이진 파일은 다른 플랫폼에서는 실행되지 않으므로 대부분의 Microsoft Windows 바이러스로부터 면역됩니다.그러나 많은 Unix 유사 설치는 Samba 소프트웨어 사용 등 Microsoft Windows 클라이언트에 파일 스토리지 서비스를 제공하며 의도하지 않게 사용자가 저장한 바이러스의 저장소가 될 수 있습니다.Unix 서버가 메일 전송 에이전트 역할을 하는 것은 일반적이며, 그 결과 이메일 바이러스 검사가 설치되는 경우가 많습니다. 클램AV 바이러스 스캐너는 소스 코드 형식으로 제공되며 UNIX 파일 시스템에서 다른 운영 체제를 감염시키는 바이러스를 검사하는 데 사용될 수 있습니다.

UNIX 계열의 operating system을 대상으로 하는 바이러스나 웜이 있습니다.실제로 최초의 컴퓨터 웜인 Morris 웜은 Unix 시스템을 대상으로 했습니다.

방화벽

네트워크 방화벽은 방화벽 반대편에 존재하는 네트워크 위협으로부터 시스템과 네트워크를 보호합니다.방화벽은 엄격하게 내부 서비스, 원하지 않는 사용자에 대한 액세스를 차단할 수 있으며 경우에 따라서는 콘텐츠에 따라 네트워크 트래픽을 필터링할 수 있습니다.

iptables

iptables는 Linux 커널 넷필터 기능과 상호 작용하기 위한 현재 사용자 인터페이스입니다.ipchains를 대체했습니다.다른 Unix와 같은 운영 체제에서는 자체 네이티브 기능을 제공할 수 있으며 다른 오픈 소스 방화벽 제품도 존재합니다.iptables에 대한 자세한 정보는 다른 곳에 수록되어 있다.여기서는 iptables를 사용하여 Linux 방화벽을 설정하는 방법에 대해 간단히 설명합니다.

netfilter네트워크인터페이스, 프로토콜, 송신원/또는 행선지 주소, 송신원/또는 행선지 포트 및/또는 패킷 상태에 따라 설정할 수 있는 스테이트 풀 패킷필터를 제공합니다.네트워크 패킷은 네트워크인터페이스가 수신한 시각부터 호스트가 받아들이거나 다른 호스트로 전송되는 시각까지 여러 체인을 통과합니다.공통 체인은 입력, 출력전달INPUT 체인은, 호스트로부터 받아들여질지, 다른 호스트에 전송될지에 관계없이, 네트워크인터페이스에 의해서 수신되는 모든 패킷에 대해서 통과됩니다.OUTPUT 체인은 네트워크인터페이스에 의해서 송신되는 모든 패킷에 대해서 통과됩니다.FORWARD 체인은 멀티홈시스템(복수의 물리 네트워크인터페이스가 있는 시스템)의 경우와 같이, 이러한 패킷이 1개의 네트워크인터페이스에서 다른 네트워크인터페이스로 호스트를 경유해 라우팅 되는 경우에 통과합니다.

내장된 각 체인에는 체인의 끝에 도달하는 패킷에 대해 수행할 액션을 정의하는 기본 정책이 있습니다.패킷 트래버설은 규칙이 패킷과 일치하고 ACCEPT, DROP, REJECT 또는 RETURN 액션이 있을 때 종료됩니다.

가장 단순한 iptables 방화벽은 원하는 각 서비스의 규칙으로 구성되어 있으며, 그 뒤에 이 규칙에 도달한 모든 패킷이 폐기됨을 나타내는 규칙이 있습니다.예를 들어, 착신 전자 메일트래픽만을 허가하는 시스템에는, SMTP 포토의 접속을 받아 들여, 그 외의 접속을 드롭 하는 룰이 있습니다.발신 접속이 다른 시스템으로부터 응답을 수신할 수 있도록 확립된 모든 접속도 허용됨을 나타내는 규칙이 필요합니다.

입력 체인

다음 예시는 위의 예에서 INPUT 체인의 단순한 패킷필터를 나타내고 있습니다.

체인 INPUT(정책 DROP 0 패킷, 0 바이트) 패킷 바이트타깃 prot는 송신원 수신처 0 0 ACCEPT all (어디서나 임의의 상태 EESTABLISHED 0 ACCEPT tcp)를 optin 합니다.LOG all –어디서나 로그레벨 경고 0 0 DROP all –어디서나 어디서든 로그레벨 경고 0 0 DROP all

명시적인 DROP 액션을 추가하면 INPUT 체인의 디폴트정책이 ACCEPT로 잘못 변경되었을 경우 패킷이 폐기됩니다.

출력 체인

OUTPUT 체인의 필요성이 적고 OUTPUT 체인의 기본 정책을 ACCEPT로 안전하게 설정할 수 있습니다.경우에 따라서는 방화벽이 특정 발신 접속을 특정 일련의 승인된 시스템으로 제한하는 것이 바람직할 수 있습니다.이를 출력 필터링이라고 하며 방화벽 내의 바이러스가 다른 시스템으로 유출되는 것을 방지하기 위해 사용할 수 있습니다.예를 들어, 전자 메일 스팸에 대항하기 위한 방법으로 단일 인증된 전자 메일 서버에 대한 발신 전자 메일 연결을 제한하는 것이 네트워크의 정책일 수 있습니다.이것은, 다음의 예에 의해서 실현됩니다.

Chain OUTPUT(정책 ACCEPT) 패킷 바이트타깃 prot out source destination 0 0 DROP tcp: 임의의 !server anywhere tcp dpt:smtp

OUTPUT 체인의 기본 정책은 ACCEPT이므로 이 에서는 다른 규칙을 포함할 필요가 없습니다.이 규칙은 방화벽으로 작동하는 호스트가 전자 메일 서버와 같은 전자 메일 자체를 보내지 않는다고 가정합니다.일반적으로 방화벽 시스템에는 방화벽으로 동작하는 데 필요한 최소한의 시스템 코드가 포함되어 있기 때문에 이는 적절한 가정입니다.

보다 제한적인 OUTPUT 체인에는 방화벽 외부에서 액세스할 수 있는 서비스에 대한 허용(ACCEPT) 엔트리와 체인 자체에 대한 제한(DROP) 정책이 포함됩니다.

일반

안전한 네트워크 통신:

패킷 스니핑:

공격:

고급.

서비스 상세

레퍼런스

  1. ^ Levi, Bozidar (2002). UNIX Administration: A Comprehensive Sourcebook for Effective Systems and Network Management. CRC Press. p. 207. ISBN 0-8493-1351-1.
  2. ^ Tykhomyrov, Olexiy (1 January 2002). "Starting Share Files with NFS". Linux Journal. Archived from the original on 8 August 2019. Retrieved 9 August 2019.
  3. ^ "/etc/exports documentation". CentOS Project. Archived from the original on 2007-05-29.

일반

  • UNIX와 인터넷 시큐리티의 실천, Simson Garfinkel과 Gene Spafford, O'Reilly & Associates, 2003.

외부 링크