SSH
Secure Shell의 약어. 공개 키 방식의 암호 방식을 사용하여 원격지 시스템에 접근하여 암호화된 메시지를 전송할 수 있는 시스템. LAN 상에서 다른 시스템에 로그인할 때 스니퍼에 의해서 도청당하는 것을 막을 수 있다.
두 호스트 사이의 통신 암호화 관련 인증 기술들을 사용하여, 안전한 접속과 통신을 제공하는 프로토콜.
원격 로그인(rlogin), 원격 명령 실행(rsh), 파일 복사(rcp), 원격 접속 서비스(telnet), 파일 전송용 프로토콜(ftp) 등을 대체하여 사용된다.
인증 방법
기본 : 공개키를 사용한 전자 서명에 의한 인증
공개키 불가능할 경우 패스워드를 이용하여 인증을 하게 된다. -> 호스트 사이의 모든 통신이 암호화에 의해서 자동 보호되기 때문에 어떠한 네트워크 공격으로도 패스워드가 노출되지 않음.
기존 Telnet 방식 : 암호화 제공 x, Wireshark같은 패킷 분석 프로그램으로 데이터 탈취가능.
작동원리
-비대칭키 방식
사용자와 서버가 서로의 정체를 증명.
서버 또는 사용자가 키 페어 생성 -> 공개키, 개인 키 한 쌍을 의미함.
파일 형식
공개키 = .pub, 개인키 = .pem
사용자가 생성한 공개키를 서버에 전송함.
받은 공개키로 랜덤 값 생성, 이를 받은 사용자는 개인키를 이용해 랜덤값을 푼다.
오직 키 페어끼리만 서로 해석이 가능함.
풀어서 나온 값을 다시 서버에 전송하면 자신이 처음에 낸 값과 비교, 같으면 접속 허용.
- 대칭키 방식
인증 이후 정보를 암호화해서 주고받음. 이 방식에서는 한 개의 키만 사용함.
공유된 대칭키로 정보를 암호화하면 받은 쪽에서도 동일한 대칭키로 이를 복호화하여 정보를 습득.
한번 사용한 키는 폐기, 다시 접속할 때마다 새로운 대칭키를 생성함.
SSH 접속
SSH 방식 진행 -> 서버와 클라이언트에 구동 프로그램 필요. 리눅스와 윈도우에 설치되어있음.
윈도우 - SSH 클라이언트 외에도 키 페어를 생성하기 위한 별도의 프로그램이 더 필요함.
1. openSSH 클라이언트 설치 및 커맨드 창에서 실행
2. PuTTYgen 사용
Windows 10 SSH 접속
ssh-keygen으로 키 페어를 생성한다. 엔터키를 눌러도 기본적으로 지정된 경로에 자동으로 저장된다.
Passphrase = 개인키 자체에 대한 비밀번호.
개인키를 탈취하더라도 이를 모르면 서버에 접속할 수 없으므로, 더 강력한 보안이 가능해진다.
여기선 따로 생성하지 않았다.
피처폰 문자같은 그림이 나오면 키 페어 생성이 잘 완료됐다는 뜻이다.
identification이 저장된 경로로 확인해서 이동해보면 위부터 개인키 파일, 공개키 파일이
.ssh 폴더에 생성된 모습을 확인할 수 있다.
- 적용
공개 키를 서버에 올리려면 먼저 서버에 접속해야 하고, 서버에 접속하려면 서버 아이디와 비밀번호,
외부에서 접근할 수 있는 서버의 ip 주소가 필요하다.
SSH 명령어로 리눅스 서버 접속하기
$ ssh [USER]@[HOSTNAME] -p [PORT]
USER : 접속할 리눅스 사용자 입력
HOSTNAME : 네트워크 상 접근 가능한 호스트네임이나 IP 지정.
PORT : 리눅스 서버의 SSH 포트. 22번 사용 시 -p 옵션 생략 가능함.
File Descriptor(파일 디스크립터)
리눅스/유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념. 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값.
- 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값.
- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스.
유닉스 시스템에서 모든 것을 파일이라고 한다. (정규 파일 + 디렉토리, 소켓, 파이프, 블록 디바이스 등)
프로세스가 파일에 접근할 때 파일 디스크립터라는 개념을 이용한다.
파일 오픈 or 소켓 생성 시 FD는 3부터 시작한다.
프로세스가 실행 중에 파일을 Open하면
커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다.
그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD) 값을 이용해서 파일을 지칭할 수 있다.
기본 할당 FD : 표준입력(Standard Input), 표준출력(Standard Output), 표준에러(Standard Error)
각각 0, 1, 2 숫자 할당.
0이 아닌 정수로 표현되는 파일 디스크립터는 0 ~ OPEN_MAX까지의 값을 가질 수 있으며, OPEN_MAX 값은 플랫폼에 따라 다르다
파일 디스크립터가 단순히 숫자인 이유는 프로세스가 유지하고 있는 FD 테이블의 인덱스이기 때문이다.
FD 테이블의 각 항목은 FD 플래그와 파일 테이블로의 포인터를 가지고 있다. 이 포인터를 이용하여 FD를 통해 시스템의 파일을 참조할 수 있다.
프로세스는 이런 FD 테이블과 파일 테이블의 정보를 직접 고칠 수 없으며, 반드시 커널을 통해서 수정해야한다.
Netcat(nc) 명령어
넷캣(Netcat) : TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램.
일반적으로는 유닉스의 cat과 비슷한 사용법을 갖고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 네트워크에 읽거나 쓸 수 있다.
원넷캣은 거의 모든 종류의 원하는 접속 형태를 만들어낼 수 있고 흥미로운 몇 가지 내장 기능을 갖고 있어 다기능의 네트워크 문제해결/조사 시 유용하게 사용가능하다.
nc [options] [target host] [port]
-n : 호스트 이름과 포트를 숫자로만 입력받음.
-v : verbosity를 증가시킴. 더 많은 정보를 얻을 수 있음. -> 포트 검색용
-o [filename] : 보내거나 받은 데이터를 헥스덤프하여 파일에 저장함.
-u : TCP 연결 대신에 UDP 연결이 이루어짐.
-p [port number / name] : 로컬 포트 지정. 주로 -l과 같이 사용하게 됨.
-s [ip 주소 / DNS] : 로컬 ip 주소를 지정함. 모든 플랫폼에서 지원되지는 않음.
-l : listen 모드로 nc을 띄우게 됨. 타겟 호스트는 입력하지 않음. nc를 server로 쓸 때 사용함.
-e [filename] : -DGAPING_SECURITY_HOLE 옵션으로 만들어졌을 때 사용가능.
-t : DTELNET 옵션으로 컴파일 되었을 때 사용 가능함. 텔넷에 접속이 가능하도로 접속 시
텔넷과 같은 협상과정을 거침.
-i [interval time] : nc는 일반적으로 8k씩 데이터를 보내고 받는데 그렇게 표준 입력의
한 라인씩 인터벌 타임마다 보내게 됨.
-z : nc에 데이터를 보내지 않고 열린 포트만 검색하도록 지시함. 단순 포트 스캔만 진행 - > 포트 검색용
-r : 포트 지점이 여러개일 경우 스캐닝 순서를 랜덤으로 만듦.(일반적으로는 높은 번호부터)
-p 옵션에서 지정가능한 로컬 포트도 랜덤화.
'시스템 해킹' 카테고리의 다른 글
pwnable.kr collision (0) | 2022.08.12 |
---|---|
set UID (0) | 2022.08.10 |
질문 - 2주차 (0) | 2022.08.05 |
quizmachine 문제 풀이 (0) | 2022.08.04 |
pwnable.kr fd 문제 풀이 (0) | 2022.08.02 |