2009-05-02 3 views
2

얼마 전 새로운 프로젝트에 참여했습니다. 꽤 오랫동안 개발 중이었습니다. 놀랍게도 모든 사용자의 비밀번호는 암호화되지 않은 양식에 저장되어 있습니다.암호화되지 않은 암호로 암호화 된 암호 사용자 기반

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

시스템에 약 20,000 명의 사용자가 있습니다.

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

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

답변

5

음, 백업과주의, 쉬운 솔루션은 다음과 같이 갈 것입니다) 새 열 (PasswordEncrypted 또는 유사한 이름)

만들기 3

2) 전체 테이블 데이터의 안전한 백업을 만듭니다 암호화되지 않은 암호 WHI의 MD5와 각 행의 새 열을 업데이트하는 UPDATE 쿼리를 사용하여 le는 32 바이트 또는 그 이상의 소금을 사용합니다. 오늘날 거의 모든 데이터베이스 시스템에는 MD5 기능이 있으므로 SQL 프롬프트를 남기지 않아도됩니다.

4) 중간에 일반 텍스트 열을 유지하고 이에 따라 응용 프로그램/스크립트를 업데이트하여 소금기가있는 암호로 작업하십시오.

5) 일반 텍스트 이전 암호 열의 이름을 임시 변경하여 응용 프로그램을 테스트하십시오. 문제가 있으면 4 단계로 돌아가서 실수를 수정하십시오.

6) 모든 것이 제대로 작동 이제 당신이 가질 수있는 이전의 공격의 영향을 완화하기위한 보안 일정 수준을 가지고 새로운 암호를 선택하는 사용자를 권장) 평문 암호 열

7을 삭제하면 성공했습니다.

0

가능한 경우 다음을 시도해보십시오. 모든 사용자에게 암호를 변경하여 암호를 변경하면 암호를 변경하지 않으면 작동하지 않는 제한 시간이 지나면 암호가 업데이트됩니다. 이러한 새 암호를 해시하고 해시를 저장하십시오. 프론트 엔드 (즉, 되돌려 보내는 데이터)를 약간 변경해야합니다.)

1 : 그것은 암호가 데이터베이스에 저장되어 있다고 가정

:-) 암호화되지 않은 사용자 암호를 포함하기 때문에

+0

사용자에게 부담을주기 때문에이 솔루션이 마음에 들지 않습니다. 그것은 다음 메시지를 사용자에게 전달합니다. 우리는 당신에게 나쁜 시스템을 제공하고 있다는 것을 깨달았습니다. 그래서 우리는 지금 그것을 고치고 있습니다. 우리는 당신을 귀찮게하고 전자 메일과 암호로 시간을 낭비 할 권리가 있다고 생각합니다. 요청 - 귀하가 행동하지 않으면 우리의 잘못으로 인해 귀하의 계정에 액세스 할 수 없게됩니다. ' – pts

+0

사용자가 비밀번호를 업데이트해야한다는 사실을 제외하고는 아무 것도 알 필요가 없다고 생각합니다. 그것은 IMO를하는 것이 좋습니다. 또한 이전 패스워드는 폭탄을 터뜨린 폭탄입니다. – dirkgently

+0

나는 그들이 그들의 계좌를 잃을 것이라고 말하지 않았다. 내가 지정한 모든 것은 시스템이 일정 기간 후에 암호 변경을 부과하는 것입니다. 나는 상당수의 금융 사이트에서이 작업을 수행하는 것을 보았습니다. 매주 'x'주가 지나면 비밀번호를 변경하는 경우 매우 특별합니다. – dirkgently

1

여러 가지 대소 문자 (대소 문자, 숫자, 기호, 유니 코드 문자, 긴 암호 등)를 테스트하는 테스트를 많이 작성하십시오. 개발하고 테스트 할 때 이전 시스템으로 돌아가는 시스템을 만드십시오 (물론 이전 암호 목록을 제공하면 패스워드가 해시되면 직접 다시 변환 할 수 없으므로). 현재 암호 목록의 복사본을 저장하십시오. 테스트 파일이나 테스트 데이터베이스에서 암호를 변환 한 다음 저장 한 암호 사본을 사용하여 모든 것이 작동하는지 테스트하십시오. 이제 시스템을 프로덕션 환경으로 옮겨 사용자가 제대로 작동하는지 확인하십시오. 그렇지 않은 경우 이전 시스템으로 이전하기위한 계획을 이미 테스트했습니다. 몇 주 동안 작동이 확인되면 일반 텍스트 암호 목록을 삭제하면 모든 설정이 완료됩니다.

1

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

당신은 각각의 로그인 시도에 대해 (암호화 및 암호화되지 않은) 모두 인증 방법을 실행하여 여분의 신뢰를 얻을 수 있습니다 단지 SELECT * INTO Backup FROM UserData

1

을, 백업을, 그들은 다른 결과를 얻을 경우, 경고 전자 우편을 얻으려면 당신에게 보냈어요. 이 변경 사항은 사용자가 볼 수 없으므로 몇 주 또는 몇 달 동안 실행될 수 있습니다. 사용자의 충분한 비율에 대해 이전 인증과 새 인증이 작동하는 것을 확인한 후 이전 인증을 비활성화하십시오.

2

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

리팩토링 도로를 내려가는 경우 암호가 암호화와 같은 가역적으로 저장되어야하는 이유가 있습니까? 일반적으로 SHA와 같은 암호로 해시 한 다음 동일한 알고리즘으로 입력을 해시하고 결과를 비교하는 것이 좋습니다. 실제 암호가 아닌 해시 된 값만 저장합니다. 이렇게하면 사용자가 암호화가 손상되고 암호가 공개 될 가능성이 있음을 알리지 않고 누군가가 올바른 암호를 입력했는지 확인할 수 있습니다.

접근 방식에 대한 특정 정보는 제공 할 수있는 정보가 아니기 때문에 (작동 방식을 모르기 때문에) 해시 된 암호를 저장하고 기존 암호를 해시 한 다음 추가 암호를 해시하는 것이 가장 좋습니다. 비밀번호 변경시 최신 상태로 유지하십시오. 모든 새 개발에이 새 열을 사용하고 이동이 완료되고 테스트되면 일반 텍스트 암호가있는 열을 삭제하십시오.

관련 문제