문제

얼마 전에 나는 새로운 프로젝트에 가입했습니다. 그것은 꽤 오랫동안 개발 중이었습니다. 나를 놀라게 한 것은 모든 사용자의 암호는 암호화되지 않은 양식으로 저장됩니다.

나는 이것의 관리에 대한 거대한 보안 취약점을 우리의 경영진에게 설명했다. 그것은 그것들에 동의하고 프로젝트를보다 안전하게 만들고 싶어하는 것처럼 보인다. 팀원도 동의합니다.

우리는이 시스템에 약 20K 사용자가 있습니다.

실제로이 일을하는 것은 매우 스트레스입니다. 암호화되지 않은 암호를 암호화 된 양식으로 마이그레이션합니다. 무언가 잘못되면 프로젝트의 재난으로 이어질 수 있습니다.

이 스트레스를 어떻게 낮출 수 있습니까? 지원? 단위 테스트 (통합 테스트)?

도움이 되었습니까?

해결책

암호화되지 않은 사용자 비밀번호가 포함되어 있으므로 백업에주의하십시오. :-)

비밀번호가 데이터베이스에 저장되어 있다고 가정하면 쉬운 솔루션은 다음과 같이 진행됩니다.

1) 전체 테이블 데이터의 안전한 백업 만들기

2) 새 열 만들기 (암호 암호 또는 유사한 이름)

3) 업데이트 쿼리를 사용하여 32 바이트 이상의 소금을 사용하는 동안 암호화되지 않은 암호의 MD5로 각 행의 새 열을 업데이트하십시오. 오늘날 거의 모든 데이터베이스 시스템에는 MD5 기능이 있으므로 SQL 프롬프트를 떠나지 않아도됩니다.

4) 일반 텍스트 열을 중간에 유지하고 소금에 절인 암호로 작업하기 위해 응용 프로그램/스크립트를 업데이트하십시오.

5) 일반 텍스트 오래된 비밀번호 열의 이름을 바꾸어 일시적으로 수행하지 않고 응용 프로그램을 테스트하십시오. 문제가 있으면 4 단계로 돌아가서 실수를 수정하십시오.

6) 모든 것이 제대로 작동하면 일반 텍스트 비밀번호 열을 떨어 뜨립니다.

7) 성공적인 이전 공격의 영향을 완화하기 위해 어느 정도의 보안이 있으므로 이제 사용자가 새로운 암호를 선택하도록 권장하십시오.

다른 팁

이것은 어떤 종류의 프로젝트입니까? 웹 응용 프로그램, 데스크탑 응용 프로그램?

리팩토링 도로를 따라 가면 암호를 암호화와 같이 가역적으로 저장 해야하는 이유가 있습니까? 일반적으로 SHA와 같은 암호를 해시 한 다음 동일한 알고리즘으로 입력을 해시하고 결과를 비교하는 것이 좋습니다. 실제 비밀번호가 아닌 해시 값 만 저장합니다. 이를 통해 누군가가 암호화가 깨지고 암호가 노출 될 가능성에 노출되지 않고 누군가가 올바른 암호를 입력했는지 확인할 수 있습니다.

귀하의 접근 방식에 대한 특정 정보는 내가 제공 할 수있는 것이 아닙니다 (작동 방식을 모르기 때문에) 가장 좋은 방법은 해시 암호를 저장하는 추가 열을 작성하고 기존 암호를 해시 한 다음까지 유지하는 것입니다. 비밀번호 변경으로 데이트를합니다. 모든 새로운 개발 에이 새로운 열을 사용한 다음 이동이 완료되고 테스트되면 일반 텍스트 암호로 열을 삭제하십시오.

많은 테스트, 많은 코너 케이스 (상부 및 소문자, 숫자, 기호, 유니 코드 문자, 긴 암호 등)를 테스트합니다. 개발하고 테스트 할 때는 기존 시스템으로 다시 이동하는 시스템을 만듭니다 (물론 기존 비밀번호 목록을 제공하여 암호가 해시되기 때문에 직접 다시 변환 할 수 없습니다). 현재 비밀번호 목록의 사본을 저장하십시오. 테스트 파일 또는 테스트 데이터베이스에서 비밀번호를 변환 한 다음 저장된 복사를 사용하여 모든 것이 작동하는지 테스트하십시오. 이제 시스템을 생산으로 옮기고 사용자가 작동하는지 확인하십시오. 그렇지 않은 경우 이미 이전 시스템으로 다시 마이그레이션 할 계획을 테스트했습니다. 몇 주 동안 작동하는 것으로 입증되면 ClearText 비밀번호 목록을 삭제할 수 있으며 모두 설정되었습니다.

현재 암호를 해시하고 새 데이터베이스 필드에 저장 한 후 암호 필드를 삭제하는 동안 해당 필드를 사용하기 시작합니다. 그런 다음 데이터를 안전하게 유지하기 위해 더 많은 보안 메커니즘을 구현했을 때 암호를 변경하기에 좋은시기가 될 것이라고 사용자에게 알릴 것입니다.

백업을하려면 그냥하십시오 SELECT * INTO Backup FROM UserData

각 로그인 시도에 대해 인증 방법 (암호화 및 암호화되지 않은)을 모두 실행하여 추가 자신감을 얻을 수 있으며, 결과가 다른 결과를 얻으면 경고 전자 메일을받습니다. 이 변경은 사용자에게 보이지 않으므로 몇 주 및 몇 달 동안 실행할 수 있습니다. 구식과 새로운 인증이 사용자의 충분한 비율에 대해 작동한다는 것을 알게되면 기존 사용자를 비활성화하십시오.

가능하면 다음을 시도 할 수 있습니다. 모든 사용자에게 이메일을 보내 시간 초과 기간 동안 비밀번호를 업데이트 한 후 비밀번호를 변경하지 않으면 작동 할 수 없습니다. 이 새로운 암호를 해시하고 해시를 저장하십시오. 이를 위해서는 프론트 엔드에 약간의 변경이 필요합니다 (즉, 다시 보낸 데이터).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top