본문 바로가기
ОКБ (실험 설계국)/IT Project

3. [IDPW Project] - 3차 진행[2020.02.28 ~ 2020.03.28]

by Rosmary 2020. 3. 29.
728x90
반응형

코로나19 사태가 심각해짐에 따라, 필자도 2월 중순부터 상반기의 정보보호기사 시험을 응시하지 않기로 결심했다. 그럼에도 불구하고, 다시 이 프로젝트를 시작하게 된 시점이 늦어진 이유는... 뭐 직장인 신분이다보니... 말해 무엇할까. 빨리 사업 아이템 들고 나와서 자동으로 수익 구조 만들 수 있는 무언가를 개발해야겠다는 생각 뿐이다. 아직까지도 까마득하게 먼 미래의 이야기지만.

 

주중에는 집에 돌아와 거의 프로젝트에 손을 대지 못했고, 그나마 주말 이틀 중 하루를 통으로 잡아 영화 보거나 음악을 들으면서 동시에 코딩을 진행했다. 지난 포스팅에서 이번 3차 진행 시 구현해야 할 사항을 정리해놓았는데, 추가된 것도 많고, 중간에 변형되거나 삭제된 내용도 있다. 더해서 메인 페이지의 구성도 조금씩 변경된 부분도 있다.

 

 

1. 메인 페이지 - 구성 변경

 

기존의 메인 페이지 구성은 1번부터 4번까지가 사용자를 위한 메뉴로, 5, 6번이 관리자를 위한 메뉴로 분리되어 있었다. 하지만, 프로그램을 약식으로나마 사용하다보니, 굳이 잘 사용하지도 않는 기능을 추가한 부분도 있었고, 추가되었으면 하는 기능이 있었기도 했기에, 메인 페이지의 구성을 과감하게 변경했다.

 

그래서 사용자 메뉴의 기존 1~4번외에, 추가로 5, 6번을 관리자 메뉴에서 사용자 메뉴로 전환시켰다. 추가된 사용자 메뉴는 사용자 각자가 등록한 계정에 대해 백업 및 타 사용자와의 공유가 가능한 "계정 관리" 메뉴 및, 저장된 정보를 바탕으로 홈페이지에 자동 로그인 준비까지 마칠 수 있도록 도와주는 "자동 접속" 메뉴다.  

 

 

이에 따라, 관리자 메뉴는 IDPW의 전체적인 설정을 관리하는 부분만 남게 되었다(물론 관리자 계정으로 Enter를 치면 나타나는 Log 확인 메뉴는 그대로 존재한다).

 

 

2. 원격지 서버로 IDPW 백업.

 

사용 중, 컴퓨터의 고장으로 저장된 계정 정보 및 이 프로그램의 구성 설정 내용을 모두 날려버린다면, 다시 복구하기가 굉장히 까다로워진다. 따라서 필자는 원격지로 백업 파일을 보낼 수 있도록 사용자 및 관리자 메뉴 각각에 메뉴를 신설했다.

 

관리자와 일반 사용자의 파일 백업 메뉴 화면. 사용자는 (5->1), 관리자는 (7->5) 메뉴를 사용한다(화면 포맷도 통일시켜야 한다...).

 

관리자 계정으로 백업을 진행하게 되면, 이 프로그램의 모든 구성 설정 파일 및 등록된 IDPW 사용자의 모든 계정 정보를 백업 할 수 있게 된다. 물론, 앞선 포스팅에서 언급했듯이, 악의적인 목적으로 관리자가 백업 받은 파일을 해독하려고 해도, 모든 파일 내용이 암호화되어있을 뿐만 아니라, IDPW 프로그램이 존재하더라도 특정 사용자임을 증명할 수 없다면 다른 사람의 계정 정보가 들어있는 파일을 볼 수 없다. 백업 파일은 zip 형태로 압축되어 제공된다.

 

사용자 계정으로 백업을 진행하면, 자기 자신의 계정 정보 외의 모든 내용은 백업되지 않는다. 설령 사용자가 다른 IDPW 사용자와 계정 공유를 위한 키를 만들어 놓았더라도, 해당 키까지 백업하지는 않는다. 사용자 계정으로 백업할 수 있는 내용은 오직 사용자가 저장한 자기 자신의 계정 정보에 대한 파일 뿐이다. 관리자 계정과 마찬가지로, 악의적인 목적으로 다른 사람의 파일을 열어볼 수 없기 때문에 파일이 실수로 유출된다고 해도 해독에 매우 오래 걸릴 것이고...

 

백업 메뉴를 선택하면, 미리 구성해놓았던 원격 서버 주소 및 포트를 설정 파일로부터 읽어오며, 해당 서버의 IP와 포트를 바꾸고 싶다면 관리자 메뉴에서 백업 설정을 바꿔주면("IDPW 백업 설정" 메뉴) 된다.

 

 

설정 값 입력을 마치고 Enter를 누르면 아래의 그림처럼, 현재 백업의 진행 사항이 화면에 나타난다. 만약 하나의 과정이라도 오류가 생긴다면, 각 항목 우측의 [+] 표시 대신, [-] 표시가 나타나게 된다.

 

 

설정한 백업 경로에, IDPW 백업과 관련된 폴더가 백업한 사용자만 사용가능한 퍼미션(700)으로 생성되며, 이 폴더 내에 IDPW 사용자명과 백업 날짜가 기재된 백업 파일이 zip 형태로 압축되어 존재하게 된다. 

 

 

원격지 백업 외에, 로컬 호스트에 백업 파일을 만들 수도 있는데, 백업 시, 모든 입력란을 공란으로 두게 되면, 자동적으로 로컬 호스트의 특정 폴더에 백업 파일을 생성한다.

 

필자가 관리자 계정 백업 코드 수정 과정에서 압축 코드를 하나 더 넣어버리는 바람에 파일이 두 개가 생겼다. 사진 수정이 귀찮아서 일단 올린다.

 

로컬 컴퓨터에 백업 파일을 생성하면, 백업 파일이 존재하는 폴더가 저절로 팝업된다. 따라서 백업 이후에 백업 파일이 어디있는지 일일이 폴더를 뒤지지 않아도 된다는 장점이 있다. 마찬가지로 백업 파일명은 IDPW 사용자명과 백업 날짜가 명시되어 있다.

 

언급했던대로, 일반 사용자는 자기 계정 정보만 저장된 파일만 백업된다.

 

2. 비밀번호 사용기간 설정 및 비밀번호 변경 알림.

 

설계 초기 단기에 설정해놓은 내용이나, 조금 늦게 해당 내용을 적용하게 되었다. 다행히 미리 설정해놓은 값들이 있어서 코드를 작성하는데 큰 시간이 걸리지는 않았다. 하지만... 이를 확인하기 위해서는 필자가 물리적으로 3개월을 기다려야만 확인할 수 있기 때문에, 해당 내용에 대한 동작 결과는 추후 포스팅을 해야할 듯 하다. 물론, 코드에서 3개월 기간을 1개월로 바꾸면 확인할 수 있긴 하지만... 아직은 그만한 시간적 여유가 없어서 기간이 도래할 때까지 기다리지 않을까싶다...(게으른 자의 변명)

 

이와 동시에, 이전의 진행 단계에서 존재하지 않았던 IDPW 사용자 비밀번호 변경 기능이 추가되었다. 

 

 

따라서, 지금까지 초기 설치 시, 설정했던 비밀번호만 사용해야했던 형태를 벗어나, 사용자가 원하는대로 언제든지 자신의 비밀번호를 변경할 수 있다. 비밀번호를 변경하면, 변경한 시점부터 3개월 동안 해당 비밀번호를 사용할 수 있으며, 3개월 만료 시, 로그인 과정에서 자동으로 비밀번호를 바꾸라는 안내 문구가 나타난다.

 

원래 비밀번호 사용 기간도 설정 값으로 지정하려했으나, 일반 PC 사용자가 이 값을 무기한으로 변경함으로써 생겨날 수 있는 정보 노출 사고 우려 때문에, 90일이라는 지정된 값으로 기간을 설정했다. 추후 필요하다면 설정을 통해 변경할 수 있도록 만들수는 있겠지만, 아직은 계획이 없다.

 

 

3. 계정 공유를 위한 키 생성.

 

원래, 자동 로그인이 가능하도록 만들기 위해 인증키를 제작하려고 했으나... 사용하다보니, 인증키를 로그인을 위해 생성하는 것이 매우 위험하다는 생각이 들었다. 왜냐하면, 인증키를 관리자 및 사용자가 각각 하나씩 가지고 있고, 그 키 파일들이 모조리 로컬호스트에 저장되어 있다면, 내 계정을 다른 IDPW 사용자가 어떠한 제지도 없이 확인하는 것이 가능하기 때문이다.

 

따라서, 인증키를 이용한 로그인 방식은 달성해야 하는 목표에서 과감하게 삭제했다. 대신, 이 인증키를, 사용자 자신의 특정 계정을 다른 IDPW 사용자와 공유해야 할 필요성이 있을 때, 사용할 수 있도록 설정했다.

 

계정 공유를 위한 인증키 생성은 사용자 계정으로만 가능하다. 해당 사용자가, 인증키 생성 메뉴를 선택하면, 계정을 공유할 IDPW 사용자, 자신이 공유하고자 하는 계정의 도메인이나 IP 주소(사용자가 등록한 정보와 일치해야 한다), 그리고  해당 도메인에서 사용하는 계정 ID를 입력하면 키 생성이 완료된다.  생성된 키는 특정 폴더에 존재하게 된다.

 

 

단, 이 인증키로 계정이 공유되었다고 해도, 계정을 공유한 다른 IDPW 사용자가 해당 계정의 비밀번호를 조회할 수는 없다. 이 인증키를 통해 할 수 있는 유일한 일은, 공유한 계정의 도메인에, 공유 계정 ID를 이용한 자동 접속만 가능하다. 그것도 단 1회만.

 

위의 예시를 들면, 피 공유자인 testuser1은 testuser2의 네*버 계정 ID인 naverzzang을 공유할 수 있는 인증키를 가지는 순간, naverzzang(티스토리에서 네*버 짱이라니...) 이라는 ID 명으로 Naver.com에 단 1회의 자동 접속만 가능해진다. 1회 자동 접속 이후에는 생성된 인증키가 모두 사라지며, 재공유되지 않는다. 다시 접속하려면, testuser2에게 해당 계정을 공유하기 위한 키를 다시 한 번 생성해달라고 요청하는 것 외에는 방법이 없다.

 

불행히도, 이번 진행 차수에서 완료하기로 한, 자동 로그인 기능은 아직 코딩을 시작하지도 못했다. 따라서, 인증키 생성과 사용자 매칭까지는 확인이 되나, 자동 로그인은 코딩 후, 여러 번의 테스트를 거쳐야 한다...

 

 


바쁜 와중에도 틈틈히 만든 프로그램을 돌려보면서, 이전에 필요성을 느끼지 못했던 새로운 기능들이 하나 둘씩 생겨나고 있다. 다음 4차 진행 시에 추가하려는 기능은 다음과 같다.

 

 

1. 언어 설정

 

현재 프로그램은 프로그램 구동 시, 시작 부분에 사용 언어를 선택하는 란을 제공한다. 하지만, 프로그램 시작 때마다 이렇게 언어를 선택하는 일 자체가 별 것 아닌 것 같아도 사용하는 입장에서 상당히 번거롭다. 따라서, 추후 코드 수정 시, 설치 시에 선택한 언어를 설정 파일에 적용하고, 프로그램 설치 후에도 이 설정을 변경할 수 있도록 만들어주려고 한다.

 

 

2. 자동 로그인 및 인증키와의 연동 과정 확인

 

자동 로그인은 이전 포스팅에서도 언급했듯이, 한 번 진행해 본 적이 있는 내용이다. 하지만, 모든 사이트에 대해 html 파일을 까서 분석해야하는 작업이 포함된만큼, 상당히 많은 시간이 소요될 듯 하다(아마도 4차 진행의 대부분 작업은 자동 로그인이 90%를 차지하지 않을까 싶다).

 

물론, 일반 사이트 뿐만 아니라, 서버 CLI로 자동 접속하도록 하는 기능도 추가하려 한다. 이 부분은 이미 원격지 서버로 백업 파일을 보내는 작업에서 한 번 진행했던 내용이라, 앞의 작업만 선행된다면 큰 문제없이 곧바로 마무리 할 수 있다.  

 

또한 자동 로그인 기능이 무사히 잘 작동된다면, 위에서 언급한 인증키를 이용한 1회 자동 접속 기능도 확인해야한다. 이 부분 역시 자동 로그인 기능이 먼저 선행되어야 가능하기 때문에, 마찬가지로 시간이 오래 걸릴 듯 하다...

 

 

3. Ctrl + C Interrupt를 이용한 각 메뉴의 중지.

 

현재 프로그램을 구동 중에 Ctrl +C 를 눌러, 프로그램을 Interrupt 시키면, 바로 종료 문구가 뜨면서 프로그램이 종료된다(물론, 이렇게 비정상적인 종료도 시스템 로그에는 로그아웃과 관련된 로그가 모두 작성이 된다. 로그인이 이루어졌다면...). 그러나, 메뉴를 잘못 눌러, 다시 돌아가야 하는 순간에는 이러한 방식으로 인터럽트를 해도 원래의 페이지로 돌아가지 못하고 프로그램이 종료된다. 따라서... 조금 귀찮은 방식이지만, 각 메뉴를 실행하는 함수 코드에 Interrupt 예외처리를 적용하고, 해당 코드 동작 시 Keyboard Interrupt가 발생하면 해당 함수만 종료하는 방식으로 코드를 수정하려 한다.

 

 

4. 파일 암호화 방식 변경.

 

이전 진행 차수까지 적용했던 암호화 방식은, 사실 여러 파일의 내용을 쭉 긁어다가 한 줄로 늘여보면, 특정 패턴이 너무 뻔하게 드러난다는 매우 위험한 문제가 있었다. 따라서, 악의적인 목적을 가진 사용자가, IDPW를 통해서 문서를 열어보지 않더라도 시간만 충분히 들인다면, 큰 문제없이 계정 정보가 포함된 파일 내용을 추출하는 것이 가능하다(단지 시간문제다. 패턴만 발견하면). 

 

이 때문에, 필자는 각 파일의 암호화 방식을 이전과 달리, 쉽게 알아볼 수 없는 형태로 변형하는 작업을 진행하려한다. 문서의 암호화 방식은... 당연히 비밀이다. 이번엔 필자의 암호화 방식도 쉽사리 깰 수 없을 것이라 장담한다.

 

 

 

 

틈틈히 시간 날 때마다, 다시 프로젝트를 진행할 예정이며, 괄목할만한 진전이 보인다면 다시 포스팅 할 예정이다.

 

FIN.

반응형

댓글