보안 코딩 기술: 사용자 지정 권한 문제

2017년 10월 25일 게시
피터 드 크레머
사례 연구

보안 코딩 기술: 사용자 지정 권한 문제

2017년 10월 25일 게시
피터 드 크레머
리소스 보기
리소스 보기

모바일용으로 개발할 때 응용 프로그램은 종종 시스템에서 일부 권한을 요청해야 하는 경우가 많습니다. Bluetooth 연결 또는 SMS 메시지를 전송하는 기능에 대한 사용자의 연락처에 액세스해야 할 수 있습니다. 위에서 언급 한 모든 권한은 Android 프레임워크에 의해 정의된 플랫폼 권한입니다.

그러나 이러한 것으로 충분하지 않고 응용 프로그램이 사용자 지정 권한을 정의해야 하는 경우가 있습니다. 나는 예를 들어 우리 자신의 회사를 사용합니다. Secure Code Warrior SCW 플랫폼에서 사용자의 성능을 포함하여 프로필의 일부로 일부 개인 데이터를 저장하는 앱을 만들 수 있습니다. 그리고 우리는 다른 보안 교육 응용 프로그램을 허용하고 싶습니다, 말 DevTrainer, 사용자가 그들에게이 작업을 수행 할 수있는 권한을 부여하는 경우이 데이터를 사용합니다. 이것은 민감한 데이터, 사용자는 확실히 아무도 이것을 알고 싶지 않을 것 이다, 하지만 SCWApp 완전히 숨기고 유용 할 수 있습니다 보호 하지 말아야. 그래서 우리는 사용자가 그것을 제어 할 수 있도록하고자합니다. 여기서 사용자 지정 사용 권한이 들어옵니다.

SCWApp는 사용자 지정 권한을 생성, DevTrainer는이 권한을 요청하고 사용자는 그가이 허용 여부를 결정할 수 있습니다. 이는 일반적인 관행이며 화이트리스트 응용 프로그램에 대한 액세스를 제한하는 좋은 방법입니다.

안타깝게도 사용자 지정 권한에 대한 직관적이지 않은 동작이 있어 보안 관점에서 위험합니다. 구체적이고 사용자 지정 권한은 언제든지 모든 앱에서 정의할 수 있으며 "첫 번째 승리"이며 이 전략에는 몇 가지 결과가 발생합니다.

다음 시나리오에서는 위에서 소개한 두 개의 앱 프로필을 정의합니다(이러한 모든 응용 프로그램은 데모 목적으로 허구입니다).

1. SCWApp: 사용자 정의 권한을 정의하고이 권한을 사용하여 구성 요소를 방어하는 응용 프로그램.

2. DevTrainer: 이 응용 프로그램은 SCWApp와 동일한 권한을 정의하고이 권한을 보유하고자하는 사용자에게 선언합니다.

이 시나리오는 피어 앱 케이스를 만든 일반적인 시나리오입니다. DevTrainer 응용 프로그램은 SCWApp에 대한 단지 플러그인이었다면 사용자 정의 할 필요가 없습니다. 가정, 이 경우, SCWApp는 DevTrainer 전에 설치 될 것이고 예기치 않은 행동이 발생하지 않을 것입니다. 어떻게 든 사용자가 DevTrainer를 먼저 설치하면 사용자는 권한 요청에 대해 알리지 않습니다. 나중에 사용자가 SCWApp를 설치하면 DevTrainer가 권한을 소급하여 부여하지 않으므로 보안 구성 요소를 사용하려는 DevTrainer 앱의 시도가 실패합니다.

이곳은 피어 앱 케이스가 들어오는 곳입니다. 경우에 따라 한 앱이 다른 앱앞에 설치될 것으로 예상할 수 없습니다. Facebook과 Twitter가 서로의 구성 요소를 사용하려면 서로의 사용자 지정 권한을 정의해야 한다고 가정해 보세요.

그러나, 이것은 까다로운 가져옵니다. DevTrainer 앱이 먼저 설치된 경우 사용자는 사용자 지정 권한 요청에 대해 알 수 없습니다. 이 시점에서 사용자에게 통보되지 않았음에도 불구하고 DevTrainer는 사용자 지정 권한을 보유하고 보안 구성 요소에 액세스할 수 있습니다.

그것은 더 까다로워집니다. DevTrainer 앱은 권한 보호 수준을 변경할 수 있습니다. 안드로이드는 수비수의 보호 수준을 사용하지 않지만 먼저 정의 되는 보호 수준, 어떤 응용 프로그램이 먼저 설치된 것을 의미 그것을 정의할 수 있습니다. 즉, DevTrainer가 권한 수준을 정상으로 변경하면 이 권한을 요청하는 향후 앱은 사용자가 확인할 필요가 없지만 자동으로 액세스 권한이 부여됩니다.

이 시나리오는 cwac 보안 github에서발견된 이 문제에 대한 설명에서 영감을 받았습니다.

"첫 번째 승리" 전략은 몇 가지 위험한 결과를 초래하며 그 행동을 알지 못하면 개발자가 신뢰할 수 없는 입력에 따라 보안 결정을 내리고 의도하지 않은 앱이 중요한 데이터 또는 보호된 서비스에 액세스할 수 있도록 허용할 수 있습니다. 신뢰할 수 없는 입력을 통해 보안 의사 결정을 피하는 방법에 대해 자세히 알아보려면 플랫폼을 방문하십시오. 이 동작은 안드로이드 5.0 (롤리팝)으로 변경되었습니다. 그러나 현재 안드로이드 장치의 22 % 이상이 여전히 안드로이드의 낮은 버전을 실행하고 있으므로 앱에서 원래 동작의 위험을 완화하는 것이 중요합니다. 앱의 첫 번째 실행에서 사용 권한이 이미 정의된지 확인하고 보안 위험을 해결하는 경우 적절한 조치를 취합니다.

행운을 빌어 요 코딩, 그리고 다음 주 당신을 참조하십시오!

사용자 지정 권한을 정의하여 앱은 리소스 및 기능을 다른 앱과 공유할 수 있습니다.

https://developer.android.com/guide/topics/permissions/defining.html

리소스 보기
리소스 보기

저자

피터 드 크레머

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

보안 코딩 기술: 사용자 지정 권한 문제

2017년 10월 25일 게시
By 피터 드 크레머

모바일용으로 개발할 때 응용 프로그램은 종종 시스템에서 일부 권한을 요청해야 하는 경우가 많습니다. Bluetooth 연결 또는 SMS 메시지를 전송하는 기능에 대한 사용자의 연락처에 액세스해야 할 수 있습니다. 위에서 언급 한 모든 권한은 Android 프레임워크에 의해 정의된 플랫폼 권한입니다.

그러나 이러한 것으로 충분하지 않고 응용 프로그램이 사용자 지정 권한을 정의해야 하는 경우가 있습니다. 나는 예를 들어 우리 자신의 회사를 사용합니다. Secure Code Warrior SCW 플랫폼에서 사용자의 성능을 포함하여 프로필의 일부로 일부 개인 데이터를 저장하는 앱을 만들 수 있습니다. 그리고 우리는 다른 보안 교육 응용 프로그램을 허용하고 싶습니다, 말 DevTrainer, 사용자가 그들에게이 작업을 수행 할 수있는 권한을 부여하는 경우이 데이터를 사용합니다. 이것은 민감한 데이터, 사용자는 확실히 아무도 이것을 알고 싶지 않을 것 이다, 하지만 SCWApp 완전히 숨기고 유용 할 수 있습니다 보호 하지 말아야. 그래서 우리는 사용자가 그것을 제어 할 수 있도록하고자합니다. 여기서 사용자 지정 사용 권한이 들어옵니다.

SCWApp는 사용자 지정 권한을 생성, DevTrainer는이 권한을 요청하고 사용자는 그가이 허용 여부를 결정할 수 있습니다. 이는 일반적인 관행이며 화이트리스트 응용 프로그램에 대한 액세스를 제한하는 좋은 방법입니다.

안타깝게도 사용자 지정 권한에 대한 직관적이지 않은 동작이 있어 보안 관점에서 위험합니다. 구체적이고 사용자 지정 권한은 언제든지 모든 앱에서 정의할 수 있으며 "첫 번째 승리"이며 이 전략에는 몇 가지 결과가 발생합니다.

다음 시나리오에서는 위에서 소개한 두 개의 앱 프로필을 정의합니다(이러한 모든 응용 프로그램은 데모 목적으로 허구입니다).

1. SCWApp: 사용자 정의 권한을 정의하고이 권한을 사용하여 구성 요소를 방어하는 응용 프로그램.

2. DevTrainer: 이 응용 프로그램은 SCWApp와 동일한 권한을 정의하고이 권한을 보유하고자하는 사용자에게 선언합니다.

이 시나리오는 피어 앱 케이스를 만든 일반적인 시나리오입니다. DevTrainer 응용 프로그램은 SCWApp에 대한 단지 플러그인이었다면 사용자 정의 할 필요가 없습니다. 가정, 이 경우, SCWApp는 DevTrainer 전에 설치 될 것이고 예기치 않은 행동이 발생하지 않을 것입니다. 어떻게 든 사용자가 DevTrainer를 먼저 설치하면 사용자는 권한 요청에 대해 알리지 않습니다. 나중에 사용자가 SCWApp를 설치하면 DevTrainer가 권한을 소급하여 부여하지 않으므로 보안 구성 요소를 사용하려는 DevTrainer 앱의 시도가 실패합니다.

이곳은 피어 앱 케이스가 들어오는 곳입니다. 경우에 따라 한 앱이 다른 앱앞에 설치될 것으로 예상할 수 없습니다. Facebook과 Twitter가 서로의 구성 요소를 사용하려면 서로의 사용자 지정 권한을 정의해야 한다고 가정해 보세요.

그러나, 이것은 까다로운 가져옵니다. DevTrainer 앱이 먼저 설치된 경우 사용자는 사용자 지정 권한 요청에 대해 알 수 없습니다. 이 시점에서 사용자에게 통보되지 않았음에도 불구하고 DevTrainer는 사용자 지정 권한을 보유하고 보안 구성 요소에 액세스할 수 있습니다.

그것은 더 까다로워집니다. DevTrainer 앱은 권한 보호 수준을 변경할 수 있습니다. 안드로이드는 수비수의 보호 수준을 사용하지 않지만 먼저 정의 되는 보호 수준, 어떤 응용 프로그램이 먼저 설치된 것을 의미 그것을 정의할 수 있습니다. 즉, DevTrainer가 권한 수준을 정상으로 변경하면 이 권한을 요청하는 향후 앱은 사용자가 확인할 필요가 없지만 자동으로 액세스 권한이 부여됩니다.

이 시나리오는 cwac 보안 github에서발견된 이 문제에 대한 설명에서 영감을 받았습니다.

"첫 번째 승리" 전략은 몇 가지 위험한 결과를 초래하며 그 행동을 알지 못하면 개발자가 신뢰할 수 없는 입력에 따라 보안 결정을 내리고 의도하지 않은 앱이 중요한 데이터 또는 보호된 서비스에 액세스할 수 있도록 허용할 수 있습니다. 신뢰할 수 없는 입력을 통해 보안 의사 결정을 피하는 방법에 대해 자세히 알아보려면 플랫폼을 방문하십시오. 이 동작은 안드로이드 5.0 (롤리팝)으로 변경되었습니다. 그러나 현재 안드로이드 장치의 22 % 이상이 여전히 안드로이드의 낮은 버전을 실행하고 있으므로 앱에서 원래 동작의 위험을 완화하는 것이 중요합니다. 앱의 첫 번째 실행에서 사용 권한이 이미 정의된지 확인하고 보안 위험을 해결하는 경우 적절한 조치를 취합니다.

행운을 빌어 요 코딩, 그리고 다음 주 당신을 참조하십시오!

사용자 지정 권한을 정의하여 앱은 리소스 및 기능을 다른 앱과 공유할 수 있습니다.

https://developer.android.com/guide/topics/permissions/defining.html

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.