2019년 3월 19일 화요일

[윈도우] 원격 접속 시 클립보드 사용 제어

서버 원격 접속 시 보안을 위하여 클립보드 사용을 제어할 수 있습니다.


 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 로컬 장치 및 리소스 리디렉션 > 클립보드 리디렉션 허용 안 함
 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Device and Resource Redirection > Do not allow Clipboard redirection


















- 설정 후 바로 적용되지 않을 경우 정책 강제 적용을 시도하여 해결할 수 있습니다.
 > gpupdate /force
- gpupdate 수행 후에도 적용되지 않을 경우 로그오프 후 다시 로그온하여 해결할 수 있습니다.



**정책 설정이 되지 않았지만 클립보드를 사용할 수 없는 경우 다음 사항을 확인할 수 있습니다.
- 원격 접속 시 "로컬 리소스"의 "클립보드" 항목 활성화
- 서버의 "rdpclip.exe" 프로세스 활성화
- "rdpclip.exe" 프로세스 종료 후 재시작



참고자료
http://hahaysh.blog.me/221258322450
https://annotations.tistory.com/45
https://forsenergy.com/ko-kr/tscc/html/13f07ba4-f29c-464f-ac90-9db2f27ddd03.htm

[윈도우] 원격 접속 세션 수 제어

서버에 원격으로 접속할 수 있는 세션의 수를 제어할 수 있습니다.


- 보안을 위하여 한 계정에 접속할 수 있는 원격 세션 수를 제한할 수 있습니다.
- 기본적으로 단일 세션으로 구성됩니다.
- 운영 편의를 위하여 세션 수를 늘리고, 같은 계정으로 동시에 작업을 수행할 수 있습니다. (별도 세션)


 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 연결 > 원격 데스크톱 서비스 사용자를 하나의 원격 테스크톱 서비스 세션으로 제한
 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 연결 > 연결 개수 제한



- 세션 제한을 비활성화 한 후, 연결 개수 제한 항목을 필요한 만큼 설정할 수 있습니다.



 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Connections > Limit number of connections
 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Connections > Restrict Remote Desktop Services users to a single Remote Desktop Services session

** Local Group Policy Editor: gpedit.msc


 - 세션이 다수일 경우 접속 시 세션 선택 화면이 표시될 수 있습니다.


참고자료
https://suinautant.tistory.com/57

[윈도우] administrator 계정명 변경

보안을 위하여 기본 관리자 계정인 Administrator 이름을 변경할 수 있습니다.


계정관리
- 보안을 위하여 계정을 안전하게 관리하는 것이 중요합니다.
- 계정의 수를 줄이는 것이 좋습니다.
- 관리자 계정 Administrator를 변경하는 것이 좋습니다.
- 잘 알려진 계정명을 사용할 경우 외부 공격자의 공격을 받을 수도 있습니다.


설정방법
- 제어판 > 관리도구 > 로컬 보안 정책
- 로컬 정책 > 보안 옵션 > 계정: Administrator 계정 이름 바꾸기

















**로컬 보안 정책: secpol.msc


참고자료
https://blog.naver.com/minki0127/220693786722


2019년 3월 12일 화요일

[용어] Hadoop 개요 및 주요 구성 요소

Apache Hadoop, High-Availability Distributed Object-Oriented Platform 관련 내용


개요
- 빅데이터를 처리하는 컴퓨터(클러스터)에서 동작하는 자바 기반의 분산 응용프로그램 지원 프레임워크입니다.
- 오픈소스 프레임워크로, 분산 환경에서 빅데이터를 저장하고 처리할 수 있습니다.
- 방대한 규모의 빅데이터 외에도 규모를 축소하여 원하는 환경에 사용할 수 있습니다.

- 처리할 데이터가 늘어날 때 필요한 컴퓨팅 자원도 늘어나며, 컴퓨터의 능력에 따라 처리량이 영향을 받습니다.
- 분산처리를 통해 많은 데이터를 저장하고 처리합니다.
- 하둡이 적용된 시스템은 데이터처리 효율이 증가합니다.
- 분산처리를 제어하여 저렴한 비용으로 원하는 크기의 데이터 저장소를 확보할 수 있습니다.


주요 구성요소
HDFS(Hadoop Distributed FileSystem): 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일 시스템입니다.
MapReduce: 대용량 데이터 처리를 위한 분산 프로그래밍 모델로, 대규모 분산 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석합니다.
- 기타 Ambari, Zookeeper, HBase, Pig, Hive, HCatalog가 있습니다.
- 쉽고 다양한 환경에서 활용성을 높이기 위하여 사용되는 소프트웨어들입니다.
하둡 에코시스템이라고도 합니다.


맵리듀스
- 구글에서 제작한 프레임워크입니다.
- 대용량 데이터 처리를 분산 병렬 컴퓨터 환경에서 처리하기 위하여 제작되었습니다.
- PB(1024TB) 이상의 대용량 데이터를 클러스터 환경에서 병렬 처리할 수 있습니다.
- 함수형 프로그램에서 Map과 Reduce라는 함수 기반으로 구성됩니다.


Zookeeper
- 대표적인 시스템 코디네이션 서비스 시스템입니다.
  분산된 시스템 간 정보 공유, 클러스터 내 서버들의 상태 체크, 동기화 및 lock처리 등을 수행합니다.
- 중복 서비스를 통해 고가용성을 제공합니다.
- 아파치 하둡의 하위 프로젝트로 시작하였지만 독립적인 상위 프로젝트입니다.
- 마스터가 응답하지 않을 때 클라이언트가 다른 마스터에게 요청합니다.
- 노드들은 네임스페이스 안에 데이터를 저장합니다.
- 클라이언트들은 노드에서 읽거나 쓰는 작업을 수행합니다.


HBase
비관계형 분산 데이터베이스입니다.
- 아파치에서 구글의 Big Table을 참고하여 Java로 제작되었습니다.
- 하둡의 HDFS 위에서 동작합니다.
- 분산된 데이터 저장을 위한 무정지 기능을 제공합니다.
- HBase의 테이블들은 하둡에서 동작하는 맵리듀스 작업을 위한 입출력을 제공합니다.
- 기존의 SQL DB를 직접적으로 대체하지는 않지만 데이터를 많이 사용하는 웹사이트 등에 사용됩니다.


Hive
- 하둡에 저장된 데이터를 쉽게 처리할 수 있는 데이터 웨어하우스 패키지입니다.
- 데이터 요약, 질의 및 분석기능을 제공합니다.
- HDFS이나 아파치 HBase와 같은 데이터 저장 시스템에 저장되어 있는 대용량 데이터 집합들을 분석합니다.
HiveQL이라는 언어를 제공하며, 맵리듀스의 모든 기능을 지원합니다.
- 빠른 쿼리를 위하여 인덱스 기능을 제공합니다.
- 내장된 아파치 Derby 데이터베이스 안에 메타데이터를 저장합니다.
- MySQL과 같은 다른 DB를 사용할 수도 있습니다.


참고자료

[리눅스] netstat 명령 상태 메시지의 의미

리눅스 netstat 명령 상태 메시지의 의미

LISTEN: 데몬 실행 중 접속 요청을 기다리는 상태입니다.
CLOSE_WAIT: 어플리케이션으로부터 연결 종료를 기다리는 상태입니다.
 > 소켓 프로그래밍에서 명시적으로 연결을 끊어주지 않으면 CLOSE_WAIT상태로 영원히 남아 시스템 자원의 손실을 초래할 수 있습니다.
ESTABLISHED: 서버와 클라이언트 간 연결이 성립되어 통신 중인 상태입니다.

CLOSED: 완전히 연결이 종료된 상태입니다.
TIME_WAIT: 연결은 종료되었지만 당분간 소켓을 열어놓은 상태입니다. 기본값(Default)은 120초.

SYS-SENT: 연결을 요청한 상태입니다.
SYN_RECEIVED: 연결 요청에 응답 후 확인을 기다리는 상태입니다.


참고자료



+ netstat 옵션
netstat -apn | grep 4118
-a 모든 연결을 출력
-p 해당 소켓과 관련된 프로세스 이름과 PID 출력
-n DNS질의를 비활성화. 빠른 응답과 IP출력.

2019년 3월 11일 월요일

[용어] SSL 통신 개요 및 통신 과정

SSL 통신에 대한 내용과 통신 과정

- 서버와 클라이언트가 주고 받는 패킷을 암호화 하여 전송하는 통신방식입니다.
- HTTPS는 SSL 프로토콜 위에서 작동하는 프로토콜입니다.
- 통신을 위하여 SSL 디지털 인증서를 사용하며, 이는 통신을 제 3자가 보증해주는 전자 문서입니다.

SSL 인증서
- 서버 접속 직후 클라이언트에게 정보를 전달하며, 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있고, 통신 내용의 악의적 변경을 방지할 수 있습니다.
- 인증을 담당하는 기업들을 CA(Certificate authority) 혹은 Root Certificate라고 하며, 엄격하게 공인된 기업입니다.
- 테스트 등의 목적으로 사설 CA의 인증서를 사용할 수 있고, 개인이 직접 역할을 수행할 수 있습니다.
- 사설 인증서를 사용하는 경우 브라우저에서 경고를 출력합니다.

- 인증서에는 서비스의 정보(발급 CA, 서비스 도메인 등)와 서버 측 공개키(공개키 내용, 공개키 암호화 방법)가 포함됩니다.
- 웹브라우저는 CA리스트를 파악하고 있으며, 목록에 포함된 CA만 공인 CA로 인식합니다.

통신 과정
1. Client Hello: 클라이언트가 서버에 접속합니다. 이 단계에서 다음의 정보를 주고 받습니다.
 - 클라이언트 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
 - 클라이언트가 지원하는 암호화 방식들 : 클라이언트와 서버가 지원하는 암호화 방식이 서로 다를 수 있기 때문에 어떤 암호화 방식을 사용할 것인지 결정이 필요합니다. 이를 위해 클라이언트 측에서 사용할 수 있는 암호화 방식을 전송합니다.
 - 세션 아이디 : 이미 SSL 핸드쉐이킹을 했다면 비용과 시간을 절약하기 위해서 기존의 세션을 재활용하게 되는데 이 때 사용할 연결에 대한 식별자를 서버 측으로 전송합니다.

2. Server Hello: Client Hello에 대한 서버의 응답입니다. 이 단계에서 다음의 정보를 주고 받습니다.
 - 서버 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
 - 서버가 선택한 클라이언트의 암호화 방식 : 클라이언트가 전달한 암호화 방식 중에서 서버 쪽에서도 사용할 수 있는 암호화 방식을 선택해서 클라이언트로 전달합니다. 결정된 암호화 방식을 이용해서 정보를 교환하게 됩니다.
 - 인증서

3. CA리스트 확인 및 키 생성/전송
- 클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지를 확인합니다.
- CA 리스트에 인증서가 없다면 사용자에게 경고 메시지를 출력합니다.
- 인증서가 CA에 의해서 발급된 것인지 확인하기 위하여 클라이언트에 내장된 CA의 공개키를 사용해 인증서를 복호화합니다.
- 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 보증되며, 인증서를 전송한 서버를 신뢰할 수 있습니다.

- 클라이언트는 위 2번 과정에서 받은 서버의 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 pre master secret이라는 키를 생성합니다.
- 이 키는 뒤의 세션 단계에서 데이터를 주고 받을 때 암호화하기 위해서 사용됩니다.
- 이 때 사용할 암호화 기법은 대칭키이며, pre master secret 값은 제 3자에게 절대로 노출되어서는 안 됩니다.

- pre master secret 값을 서버에게 전달하기 위하여 서버의 공개키로 pre master secret 값을 암호화합니다.
- 값을 전송하면 서버는 자신의 비공개키로 안전하게 복호화합니다.
- 서버의 공개키는 서버로부터 받은 인증서 안에 포함됩니다.

4. 세션키 생성/공유
- 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화합니다.
- 서버와 클라이언트가 모두 pre master secret 값을 공유하게 되면 서버와 클라이언트는 모두 일련의 과정을 거쳐서 pre master secret 값을 master secret 값으로 변환합니다.
- master secret은 session key를 생성합니다.
- session key 값을 사용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후에 주고 받습니다.
- 위 과정을 통해 세션키를 클라이언트와 서버가 모두 공유하게 됩니다.

5. 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알립니다.

SSL 통신의 보안
- SSL은 안전하다는 인식이 있지만 패킷이 암호화되어 IPS 등의 검사 없이 통과할 수 있기 때문에 오히려 위험할 수 있습니다.
- 암호화 통신을 통하여 위협 개체가 검사 없이 통과할 가능성이 존재합니다.
- 이를 검사하기 위해 복호화 기술을 함께 사용할 수 있지만 성능 저하와 과부하문제를 고려해야 하며, 이로인한 서비스 중단의 위험이 있습니다.
- SSL기반으로 C&C 통신을 하는 악성코드의 경우 트래픽을 식별하는데 한계가 있습니다.


참고자료

2019년 3월 6일 수요일

[용어] 환경변수 path

윈도우에서 사용할 수 있는 환경변수, path 관련 내용

- 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임입니다.
- 시스템에서 사용할 수 있는 변수를 의미합니다.
- ".BAT" 확장자를 가지는 일괄 처리 파일이나 스크립트 안에서 활용될 수 있습니다.
- 일반적으로 변수 이름 주변이나 앞에 "%", "$" 등의 기호를 사용하여 참조합니다.

- 다음과 같은 명령으로 변수 내용을 확인할 수 있습니다.
 > echo %PATH%
 # echo $PATH


path변수
- 시스템 디렉터리 경로의 목록을 저장하는 변수입니다.
- CLI 환경에서 전체 경로를 지정하지 않고 명령/프로그램을 입력하면 이 목록을 확인합니다.

- 현재 경로에 프로그램이 없을 때 시스템은 성능을 위하여 모든 경로를 검색하지 않습니다.
- 같은 이름을 갖는 다른 파일이 실행되어 발생할 수 있는 위험을 방지합니다.
- CLI 환경에서 자주 사용하는 명령/프로그램을 보다 쉽게 사용하기 위하여 추가 설정할 수 있습니다.


참고자료
https://ko.wikipedia.org/wiki/%ED%99%98%EA%B2%BD_%EB%B3%80%EC%88%98
http://mwultong.blogspot.com/2006/03/path.html
https://booolean.tistory.com/403
https://c-calliy.tistory.com/42

2019년 3월 5일 화요일

[리눅스] 사용자 식별자 uid(gid)와 id명령어

리눅스에서 사용자 식별을 위한 uid(gid)와 uid 조회를 위한 명령어 id에 대한 내용

- 사용자 식별을 위하여 유저 아이디(UID)로 구분합니다.
- 양의 정수로 0부터 32767까지(16bit) 사용합니다.
- 0은 무조건 슈퍼유저(root)입니다.

- 시스템에 따라서 시스템 용도로 예약되어 있는 경우도 있습니다.
- 보통은 1부터 100까지 이며, RedHat은 101부터 499까지, 데비안은 999까지 예약되어 있습니다.
- 사용자 정보가 담긴 파일 /etc/passwd 파일에서 uid로 사용자를 구분합니다.

- 그룹을 통해 사용자를 묶을 수 있으며 그룹에는 GID가 부여됩니다.
- 루트의 그룹은 항상 0입니다.
- /etc/passwd와 /etc/group 파일로 확인할 수 있습니다.

- id 명령어로 자신의 uid, gid, 그룹을 확인할 수 있습니다.


참고자료

[리눅스] 패스워드 관리 - shadow의 구조

리눅스 시스템의 패스워드 관리 방법

- 리눅스에서는 사용자의 정보를 /etc/passwd 파일에 보관합니다.
- passwd파일의 수정은 불가하지만 누구나 볼 수 있습니다.
- 과거에는 패스워드 정보도 함께 포함되었지만, 보안상의 이유로 /etc/shadow 파일에 별도 보관됩니다.
- shadow파일은 root만 읽을 수 있도록 설정되어 있습니다. (퍼미션 400)

- shadow에 저장되는 패스워드는 단방향 해시함수에 의하여 암호화됩니다.
  "A > B"는 가능하지만, "B > A"는 어렵습니다.
- 패스워드는 임의의 값(salt)과 추가 연산되어 보안을 강화하여 저장됩니다.


shadow의 구조 
- 9개 항목으로 구성되며, 각 항목은 콜론(:)으로 구분됩니다.
 1. Login Name: 사용자 계정
 2. Encrypted: 패스워드를 암호화시킨 값 (다시 3개의 항목으로 나뉘며, "$"로 구분됩니다.)
 3. Last Changed: 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
 4. Minimum: 패스워드가 변경되기 전 최소사용기간 (일)
 5. Maximum: 패스워드 변경 전 최대사용기간 (일)
 6. Warn: 패스워드 만기일 전 경고 메시지 제공 기간
 7. Inactive: 로그인 접속 차단(패스워드 파기/비활성화) 기간
 8. Expire: 로그인 사용을 금지하는 계정 만료 기간 (월/일/연도)
 9. Reserved: 사용되지 않음 (예약필드)



**암호화된 패스워드는 다음의 구조로 저장됩니다.
 [$Hashid $Salt $Hash vlaue]
Hashid 
- 어떤 "scheme"을 사용했는지 표시합니다.]
- 사용한 scheme에 따라 값이 달라지며, 주로 $1, $5, $6이 사용됩니다.

Salt 
- 해시함수의 특성상 해시 값으로 원래 값을 구할 수 없습니다.
- 공격자들은 모든 해시 쌍을 미리 구해놓은 "레인보우테이블"을 사용하여 크래킹을 시도합니다.
- 이를 통해 값을 대입하여 고속으로 패스워드를 크랙할 수 있습니다.
- 레인보우 테이블의 사용을 방해하기 위하여 "salt" 값을 넣습니다.
- salt는 해시 함수가 참고하는 임의의 값입니다.
- salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다.

Hash value 
hashid의 방법과 salt값을 가지고 해시함수를 수행한 결과입니다.



참고자료

[리눅스] 사용자 및 그룹 관리와 관련 파일

리눅스의 사용자 및 그룹 관리방식과 관련 파일 내용

개요
- 사용자 및 그룹, 패스워드 등의 정보는 주로 /etc 디렉토리 하위에 저장됩니다.
- 사용자를 생성할 때 passwd, group, shadow 파일이 업데이트됩니다.
- 계정이 하나 생성되면 그룹도 함께 생성됩니다.
- 각 파일의 백업 파일은 파일명 끝에 하이픈(-)이 붙습니다.


주요 파일
- /etc/shells: 사용할 수 있는 쉘의 종류(목록)를 확인할 수 있습니다.
- /etc/default/useradd: 사용자 생성 시 적용되는 기본 정보입니다.
- /etc/login.defs: 사용자 생성 시 적용되는 기본 값이 저장된 파일입니다.
- /etc/skel: 이 디렉토리의 모든 파일은 사용자 생성 시 사용자의 홈디렉토리로 복사됩니다.


passwd 파일
- 필드 내용
 1. 사용자 이름
 2. 암호화된 비밀번호. 현재는 사용되지 않고, x만 표시
 3. 사용자의 UID. OS가 사용자에게 부여한 번호
 4. 사용자의 GID. 사용자가 속한 그룹에 부여된 번호
 5. 설명문
 6. 사용자의 홈 디렉토리
 7. 실행할 프로그램. 일반적으로 사용자의 로그인 쉘

- 7번 필드 내용으로 해당 계정의 로그인 가능 여부를 확인할 수 있습니다.
  로그인 불가: /bin/false, /sbin/lologin
  로그인 가능: /bin/bash, /bin/sh, /bin/ksh, /bin/csh

- 사용자 종류와 UID 할당 범위
  슈퍼유저(관리자): 로그인 가능. 시스템을 관리하는 사용자. (UID 0)
  시스템유저: 로그인 불가. 데몬이나 특정 프로그램을 실행하는 사용자. (UID 1 ~ 100)
  일반유저: 로그인 가능. 자신의 디렉토리에 자료를 관리하는 일반 사용자. (UID 500 ~ 65534)

**passwd 파일의 예


group 파일
- 필드내용
 1. 그룹명
 2. 그룹 비밀번호. x문자가 표시되며, /etc/gshadow 파일에 정보 포함
 3. 그룹 번호 GID
 4. 그룹 멤버 리스트. 여러 멤버가 있을 경우 “,”로 구분

- 주요 그룹
  root: 슈퍼유저 root가 속한 그룹
  wheel: 관리자 권한을 가진 그룹
  users: 일반 유저 권한을 가진 그룹


shadow 파일
- 필드정보
 1. 사용자명
 2. 암호화된 비밀번호
 3. 최근 비밀번호 변경일. 1970/1/1 기준 날짜 수
 4. 비밀번호 변경 후 재설정을 위한 대기일
 5. 비밀번호 유효기간
 6. 비밀번호 변경 경고 시간
 7. 비밀번호 유효 기간
 8. 비밀번호 만료 기간 이후 계정 비활성화 되는 기간
 9. 사용되지 않는 예약영역

- 비밀번호를 보관하는 알고리즘은 authconfig 명령으로 변경할 수 있습니다.


참고자료

[리눅스] 사용자 정보 파일 passwd

파일의 경로는 다음과 같습니다.
 /etc/passwd

- 리눅스의 계정 정보를 담고 있는 텍스트 파일입니다.
- 패스워드 정보를 해시값으로 보관했으나, 최근 리눅스에는 포함하지 않습니다.
- 패스워드 정보는 "/etc/shadow"파일에 암호화되어 보관됩니다.

- 콜론(:)으로 필드를 구분하며 다음의 정보를 포함합니다.
 필드 1: 사용자명
 필드 2: 패스워드(/etc/shadow 파일에 암호화되어 있음)
 필드 3: 사용자 계정 uid
 필드 4: 사용자 계정 gid
 필드 5: 사용자 계정 이름(정보)
 필드 6: 사용자 계정 홈 디렉토리
 필드 7: 사용자 계정 로그인 쉘

보안관련 사항
- 리눅스 시스템은 UID, GID를 기준으로 권한을 부여합니다. root가 아니어도 값을 0으로 바꾸면 모든 권한을 갖게 됩니다.
- 쉘 필드를 변경하여 로그인 시 악성쉘이 실행되도록 할 수 있습니다.
- 위와 같은 사항을 염두하여 파일 내용의 변경 여부를 확인할 필요가 있습니다.


참고자료
http://webdir.tistory.com/129
https://zetawiki.com/wiki/리눅스_패스워드_파일_/etc/passwd
http://eunguru.tistory.com/88
http://webdir.tistory.com/133

[Network] DMZ의 정의

DMZ (De-Militarized Zone) - 보안을 위하여 내부/외부 네트워크를 분리할 때,  외부로 서비스는 제공 하면서  내부의 보안을 유지 하기 위한 방법입니다. - 내부망과 외부망 사이에 위치한 네트워크입니다. ...