하드코드된 중요정보
정의
- 프로그램 코드 내부에 하드코드된 패스워드를 포함하고, 이를 이용해 내부 인증에 사용하거나 외부 컴포넌트와 통신을 하는 경우 관리자의 정보가 노출될 수 있어 위험하다.
- 하드코드된 암호화 키를 사용해 암호화를 수행하면 암호화된 정보가 유출될 가능성이 높아진다.
- 암호키의 해시를 계산해 저장하더라도 역계산이 가능해 무차별 공격(Brute-Force)공격에 취약할 수 있다.
안전한 코딩기법
- 패스워드는 암호화 후 별도의 파일에 저장하여 사용
- 중요 정보 암호화 시 상수가 아닌 암호화 키를 사용
코드예제
다음은 안전하지 않은 코드예제입니다. 소스코드에 패스워드 또는 암호화 키와 같은 중요정보를 하드코딩 하게 되면 중요 정보가 노출될 수 있어 위험합니다.
#하드코드된 중요정보(안전X)
def query_execute_bad(query):
dbconn = pymysql.connect(host='127.0.0.1', port='3000', user='root',
passwd='1234', db='mytable', charset='utf8')
c = dbconn.cursor()
c.execute(query)
dbconn.commit()
dbconn.close()
다음은 안전한 코드예제입니다. 패스워드 같은 중요정보는 안전한 암호화 방식으로 암호화 후 별도 분리된 파일에 저장해야 하며, 암호화된 정보 사용 시 복호화 과정을 거쳐서 사용해야 합니다.
#하드코드된 중요정보(안전O)
def query_execute_good(query, config_path):
with open(config_path, 'r') as config:
dbconf = json.load(fp=config)
block_key = get_decrypt_key(dbconf['block_key'])
db_user = decrypt(block_key, dbconf['user'])
db_pwd = decrypt(block_key, dbconf['pwd'])
dbconn = pymysql.connect(host=dbconf['host'], port=dbconf['port'], user=db_user,
passwd=db_pwd, db=dbconf['mytable'], charset='utf8')
c = dbconn.cursor()
c.execute(query)
dbconn.commit()
dbconn.close()
보안기능/하드코드된 중요정보
[참고문헌] Python 시큐어코딩 가이드(2022) / KISA(한국인터넷진흥원)