불필요한 업무는 줄이고, 필요한 업무는 추가해 효율적으로 업무 하기
작년 말쯤 서비스 내 Credential Stuffing 공격이 발생했습니다. 해당 공격을 막기 위해 급히 아이디로 로그인 기능을 차단했고, (SNS 로그인은 남겨두었습니다.) 이후 별다른 조치 없이 해당 기능은 차단된 상태로 복구되지 못하고 있었습니다.
언제까지나 해당 기능을 차단할 수는 없는 노릇이기에
해킹 문제를 재발생시키지 않으면서 아이디로 로그인 기능을 복구할 수 있는 방안이 필요했습니다.
크리덴셜 스터핑(Credential Stuffing) 이란?
암호화된 개인정보, 로그인 자격 증명을 미리 대량으로 확보해 두고 사이트에 무작위로 대입해 보며 사용자의 계정을 탈취하는 해킹 공격 방식.
쉽게 말해 일반적인 사용자가 여러 사이트에서 동일한 아이디와 비밀번호를 재사용한다는 점을 역이용하여 공격자가 보안이 약한 특정 사이트에서 확보한 사용자의 ID와 비밀번호를 다른 디지털 서비스의 로그인 페이지에 입력하면서 해킹을 시도하는 방식을 말합니다.
2차 인증을 도입하여 이슈를 해결하는 것으로 1차적으로 협의가 이루어진 내용을 전달받았습니다. 이는 아이디로 로그인 기능 제한을 풀되, 로그인 직후 휴대폰번호를 통해 ci, di를 체크하여 해당 정보가 있는 유저는 알림톡을 발송해 추가로 숫자 인증을 받거나, 해당 정보가 없는 유저들은 문자를 통한 추가 본인인증을 하도록 유도하는 방식이었습니다.
해당 방식을 도입하면 가입 당시의 휴대폰번호로 실시간 전송되는 인증번호를 입력해야만 로그인을 할 수 있기 때문에 개인정보가 유출되더라도 해킹으로 인한 피해를 막을 수 있습니다. 또한, 저희 서비스는 최초 로그인 이후 자동 로그인 해제 기능을 쉽게 제공하지 않기 때문에 로그인시마다 2차 인증을 받더라도 유저의 피로도에 많은 영향을 미치지 않을 수 있을 것이라고 판단한 것입니다.
해당 이슈는 빠른 처리를 위해 해결방안까지 도출된 상태였기 때문에 그대로 진행하면 되는 상황이었습니다. 하지만 프로젝트 이슈를 정리하다 보니, 결정된 방안의 비효율성을 발견하게 되었습니다.
확인해 보니 ci, di가 있는 회원과 없는 회원에게 동일하게 알림톡을 발송할 수 있었으며 ci, di는 서비스 초창기 회원이 아니라면 대부분의 유저들이 가지고 있었기에 ci, di가 없는 유저들을 고려하여 인증 방식을 구분할 필요성이 낮아 보였습니다.
ci, di가 없는 유저의 비중이 어느 정도인지 파악해 보는 과정이 필요했습니다. 아이디로 로그인 차단으로 인해 SNS 로그인이 유일한 로그인 방법이었기 때문에 로그인을 시도한 이력이 있는지 파악하기 위해 ci, di가 없고 SNS 로그인도 시도하지 않은 유저 수를 확인했습니다.
DB에서 직접 확인한 결과, 탈퇴한 유저를 제외하고 해당 유저수는 약 37,000명 정도였습니다. 해당 유저들의 마지막 로그인 시도 날짜 중 가장 최근 기록은 2023년 7월이었고, 2023년 1월 기준으로 마지막으로 로그인을 시도한 유저는 약 570명이었습니다.
따라서, 약 1년 전까지 로그인을 시도한 기록이 있는 유저들을 휴면회원에서 활성회원으로 전환될 가능성이 있는 유저라고 판단했을 때 가능성이 있는 유저는 570명 내외이며, 전체 회원의 약 0.047% 정도로 매우 적은 비중을 차지하고 있는 유저들이었습니다.
현재는 회원가입을 할 때, 그리고 서비스 내 핵심기능을 처음 사용하려고 할 때 본인인증을 필수로 받고 있기 때문에 신규 유저는 지속적으로 늘어도 ci, di가 없는 유저들은 앞으로도 늘어날 가능성이 전무했습니다. 특히 알림톡보다도 문자 본인인증 과정이 유저가 겪는 인증 UX면에서 더 복잡하기 때문에 ci, di가 없는 유저만 해당 방식을 제공할 사유는 더욱 없어 보였습니다.
결정된 해결방안에 대한 의견을 검증된 데이터와 함께 설명하고 새로운 해결방안으로써 ci, di가 있는 회원도 없는 회원도 동일하게 알림톡을 발송하는 방향을 공유하였고 제안한 해결방안에 대해 구성원들은 긍정적으로 동의해 주었습니다.
추가적으로 2차 인증을 도입하였을 때 유저들의 서비스 경험에 영향을 주지 않도록 알림톡 본인인증 페이지를 구성했습니다. 인증 방식이 문자가 아닌 알림톡이었기에 해당 방식으로 인해 유저가 서비스로부터 느끼게 될 신뢰도 측면의 우려를 인증 페이지 내에서 최대한 고려하고자 함이었습니다.
해킹 방지를 위해 가운데 자리를 마스킹하되 알림톡이 어떤 휴대폰번호로 발송이 되었는지 확인할 수 있도록 뒷자리를 노출하였으며, 알림톡 인증이 익숙하지 않은 유저를 위해 알림톡으로 인증번호가 발송되었다는 점을 문구를 통해 밝혔습니다.
페이지 하단에는 본인인증이 필요한 이유에 대해 확인할 수 있는 페이지를 추가했는데, 안내 문구의 내용 구성은 해킹 이슈에 대한 내용이 드러나지 않도록 하면서 안전한 서비스 사용을 위해서 꼭 필요한 과정이라는 점을 강조하였습니다. 거부 가능 여부에 대해서도 설명을 덧붙이고 본인인증을 원하지 않을 경우 사용할 수 있는 다른 로그인 방식을 제공하여 유저로 하여금 본인인증에 강제성을 부여하지 않기 위해 노력했습니다.
우리는 업무의 효율성에 대해 자주 이야기합니다. 하지만, 빠르게 결정하고 최소한으로 적은 리소스를 들여 짧은 기간 안에 작업을 마무리하며 업무를 효율적으로 처리했다고 착각합니다.
과연 최소한의 리소스로 최대한 빠르게 업무를 처리하는 것만이 효율적인 업무라고 할 수 있을까요?
효율성이란 최소한의 투자로 기대에 부합하는 결과를 얻는 것이기도 하지만, 작업을 올바른 방향으로 해내는 것이기도 합니다. 그런 의미에서 불필요한 작업을 덜어내는 것도 효율적인 업무이며, 넓게 보았을 때 반드시 필요한 작업을 추가하는 것도 효율적인 업무의 시작이 될 수 있다고 생각합니다. 우리의 목표는 목적에 맞게 합리적으로 업무를 수행하는 것이지 그저 빠르게 업무를 수행하는 것이 아니니까요. 속도는 목적과 방향이 맞았을 때 고려해야 합니다.
그럼 불필요한 작업과 필요한 작업은 어떻게 판단하는 것일까요. 개인적으로 서비스를 제공할 때의 불필요한 작업은 작업자의 휴먼 리소스를 낭비하는 일, 필요한 작업은 유저를 위하는 일로 구분하는 것이 아닐까 합니다.
비슷한 예로 많은 기업들이 MVP(Minimum viable product), 최소 기능 제품으로 서비스를 출시하기 위해 노력하지만 그들과 우리가 늘 놓치고 있는 건 최소 기능을 설정하는 단위입니다. 최소 기능 제품을 만들기 위해 설정하는 최소 기능 단위의 기준은 Value, 가치입니다. 유저가 가치를 느낄 수 있는 수준까지의 기능만 최소한으로 제작해 제품으로 출시하는 것, 그게 본 MVP의 취지이니까요.
어떤 업무를 하든, 서비스를 만들어가고 있는 우리는 잊지 않아야 합니다. 우리가 무엇을 위해 업무를 하고 있는지를요. 우리는 유저에게 가치를 전달하기 위해 일하고 있습니다. 업무의 효율을 중시하며 업무의 효과를 떨어뜨리지 않았으면 합니다.