본문 바로가기
공부/IT 감사 및 내부회계 IT

데이터 베이스 보안 및 데이터베이스 우회 접근 불가 확인 방법 - SQLORA.NET

by Goddoeun 2022. 12. 10.
728x90
반응형

데이터 베이스 보안의 목적은 접근통제(허가된 사용자 만의 접근), 권한 통제(사용자별 허가된 쿼리만 사용) 및 사후 추적(허가된 사용자의 활동/감사 로그) 등이 될 수 있다.

가장 높은 시장 점유율을 기록하고 있는 오라클 데이터베이스에서 기본적으로 제공하고 있는 보안 기능은, 명령에 대한 권한관리는 ID를 통해서 권한을 세분화하고 있고, 접근에 대한 통제는 IP를 통한 기능을 제공하고 있으나, ID와 IP를 동시에 제한하는 보안정책은 지원하지 않는다.

편의성 때문에 3Tier로 구성된 대부분의 회사들은 AP서버로 접속하여 DB로 접근하는 것이 일반적이다. 보안의 관점에서는 실제로 AP 서버에 접속하는 수많은 사용자가 궁극적으로 DB에 접근하게 되고, 이는 업무별로 다른 DB의 ID를 이용하여 접근하게 되므로 동일한 업무를 수행하는 사용자들이 동일한 DB ID를 공유하는 상황이 발생하기에 사용자 별 권한 관리에 어려움이 있다.




이를 cover하기 위해 대부분의 큰 기업들은 데이터베이스를 접근제어 솔루션을 도입하여 통합 관리하고 있다.

DB 접근제어 툴이 존재하지만, 해당 툴을 통하지 않고 DB로 직접 접근을 할 수 있을 경우가 존재할 수 있으니, 각 회사는 서버에서던지, 방화벽이라던지 등 DB 접근제어 툴을 통해서만 운영 DB로 접근할 수 있도록 설정해두어야 한다.

[DB 접근제어 툴 구현방식]
1. DB 접근제어 툴 방식 : 별도의 DB 접근제어 툴을 이용해서만 DB 서버에 접근하는 방식이며, 우회 접속 경로 차단이 필요하다.

2. Agent 방식 : 서버에 별도의 접근통제 및 로깅용 Agent를 설치하는 방법으로 가장 강력한 통제 기능을 제공한다.

3. 스니핑 방식 : 네트워크 상에서 송수신되는 패킷 정보를 이용하여 접근 차단 및 로깅하는 방식으로 네트워크에 부하 없이 모니터링만 필요할 경우 적합하나, 접근차단 및 권한 차단이 불안정한 단점이 있다.

4. Proxy 방식 : 모든 DB 접속 프로그램에 대한 지원이 가능하며 강력한 보안 기능을 제공하는 방식으로 간단한 정책 추가 만으로 DBMS 추가가 가능하여 많은 DB를 갖고 있는 대형 회사들에게 적합하다. 단, 우회 접속 경로 차단이 필요하다.

5. In-line 방식 : DB 서버와 사용자 사이의 이동경로상에 In-Line으로 설치하는 방식으로 설치 및 제거가 쉽고 서버나 클라이언트에 별도의 프로그램 설치나 설정 변경이 필요 없는 방식으로 인기 있는 구성 방식이다.

위는 참고용으로 DB 접근제어 툴의 종류를 설명한 것이다.
많은 기업이 사용하는 DB Safer의 경우는 아래와 같은 구성을 갖고 있다고 한다.

출처 : https://m.korea.kr/expertWeb/resources/files/data/document_file/2008/T21.pdf



본론으로 넘어가서, DB 접근제어 툴을 사용한다고 하여도, 결국에는
사용자 -> DB 접근제어 툴 -> DB로 접근하여야 하는데,
사용자 -> DB 혹은 사용자 -> OS -> DB 등 회사에서 정의하는 접근 방식을 우회한 접근에 대해서 회사가 직접 차단을 해야 한다.

차단을 하는 방법에는 방화벽, 서버 내 /etc/host.allow or deny 등의 기능을 활용할 수 있지만,
오늘 다룰 내용은 SQLnet. ora이다.

* DB 접근제어 툴 우회 불가 비슷한 글(host.allow/deny) : https://goddoeun.tistory.com/7

[보안] 허용된 호스트만 접근 허용, 접근제어솔루션 우회불가 확인 방법 (DBSafer, Hiware 등의 IT Suppo

많은 회사들이 OS, DB 등에 접근하기 위하여 별도로 접근제어솔루션을 도입하여 사용하고 있습니다. 그럴 경우에 생각할 수 있는 위험은, 회사의 중요 OS, DB에 접근할 때, 접근제어솔루션을 우회

goddoeun.tistory.com

SQLNET.ORA


SQLNET.ORA라는 파일은 클라이언트와 데이터베이스 서버 양쪽에 존재하는 파일이다.
이는 오라클 서버로 어떻게 접속할 것인지를 설정하는 파일이라고 보면 된다.

(나도 데이터베이스에 관련해서는 전문가가 아니라 잘은 모르지만, 다양한 회사를 방문하면서 한번 들어본 내용이다.
찾아보면서 하나하나 알아가다 보면 결국 답은 나올 것이라 생각한다! 이 방식이 답이라는 것이 아니고, 참고만 하라는 이야기다..! (찡긋))

SQLNET.AUTHENTICATION_SERVICES= (NTS | none)
클라이언트가 오라클 서버로 접속할 때 오라클이 어떠한 인증 서비스를 사용할 것인가
none : sys 계정으로 로그인할때 비밀번호를 입력해야만 들어 갈수 있게 설정
sqlplus "/as sysdba" 가 안먹힘


NAMES.DIRECTORY_PATH= (TNSNAMES | ONAMES | HOSTNAME)
클라이언트가 디비 접속 시 사용하는 STRING NAME ALIAS를 무엇을 통해 확인할지를 결정하는 것


TNSNAME : 로컬네임서버를 확인하겠다는 의미, (TNSNAME.ORA파일 확인)


ONAMES : 오라클 네임서버를 확인하겠다는 의미이며 추가적으로 NETWORK ADDRESS를 설정해줘야 함.


HOSTNAME : 호스트네임서버를 확인하겠다는 의미이며 TNSNAME.ORA파일은 필요없이 DNS나 WINDOWS의 경우 HOST파일(C:\WINDOWS\SYSTEM32\DRIVERS\ETC)에 등로되어 있으면 된다

주의사항 --> 공백이 절대 존재해선 안된다
NAMES.DIRECTORY_PATH=(TNSNAMES, HOSTNAME) X
NAMES.DIRECTORY_PATH=(TNSNAMES,HOSTNAME) O

만약 공백 존재시 다음과 같은 에러가 발생할수 있다.
ORA-12170 : TNS: Connect timeout occured
ORA-12560 : TNS: protocol adapter error



tcp.validnode_checking = yes


tcp.invited_nodes = (IP1, IP2, IPn) <- 정의된 IP만 접근 나머지는 모두 접근 거부
tcp.excluded_nodes=(IP1, IP2, IPn) <- 정의된 IP만 접근거부, 나머지는 모두 접근 가능
sqlnet.expire_time = 10 <-- 세션을 정리하는 시간 10분에 한번씩 신호를 보내서 새션을 정리하는 옵션

참고

위는 간단한 기능 설명이다.
우리가 보면 되는 부분은, 읽어보면 알겠지만 마지막 줄의

tcp.invited_nodes = (IP1, IP2, IPn) <- 정의된 IP만 접근 나머지는 모두 접근 거부
tcp.excluded_nodes=(IP1, IP2, IPn) <- 정의된 IP만 접근거부, 나머지는 모두 접근 가능

가 될 것이다.

이를 통해서 임의의 사용자에 의한 원격 접속을 차단하고 특정 클라이언트에서의 접근만 가능하도록 접근 가능 IP를 설정하여 불필요한 외부의 사용자가 접근하는 것을 차단할 수 있다.

TCP.VALIDNODE_CHECKING = YES -> YES로 하여야 아래 내용이 설정이 가능하다.
TCP.INVITED_NODES=(접속을 허용할 ip)
TCP.EXCLUDED_NODES =(접속을 차단할 ip)

예시 )
TCP.VALIDNODE.CHECKING = YES
TCP.INVITED_NODES =(192.XX.XX.XX, 192.XX.XX.XX, dbms.com)
TCP.EXCLUDED_NODES =(192.XX.XX.XX)

회사에 따라서 어떤 식으로 구성하였을지는 상이하겠지만, 회사에 따라서 환경이 다르기 때문에 해당하는 부분을 이해하고 설정을 확인하면 될 것이다.

내가 방문했던 한 회사의 경우, 해당 설정이 사용자의 PC 서버 대역을 EXCLUDED처리를 하고 나머지를 INVITED로 하였었다. 사유는, 일반 서버 대역에서 DB가 서버와 연동이 되어있는 부분이 있기 때문이라고 확인하였고 이는 OS에 대한 우회 불가 설정 확인을 통하여 납득할 수 있었다. 어찌되었던 risk가 없을수는 없고 최대한 타고타고 올라가서 합리적인 선따지 방어할 수 있다면 그것으로 충분하다고 생각한다.


다시 또 몰랐던 사실을 알게 되면 작성을 해보도록 하겠다.
그럼 안뇽!

728x90
반응형

댓글