0,0
рейтинг
30 августа 2013 в 20:11

Разработка → Получение root доступа в Mac OS X без пароля

Краткий пост об уязвимости, найденной примерно полгода назад.


Эксплойт позволяет злоумышленнику получить root доступ к системе без пароля из-за уязвимости в sudo. Работа проверена на Mac OS 10.7 — 10.8.4, возможно также уязвимы более ранние версии. Работа эксплойта возможна благодаря возможности без пароля перевести время в Mac OS на первое января 1970 года.

Эксплойт уже пару дней доступен в Metasploit.
(via packetstormsecurity)
Константин Богданов @thevar1able
карма
84,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (49)

  • +53
    Астрологи объявили неделю эксплойтов Apple.
    Продажи конкурентов увеличились вдвое.
    • –8
      Это… это прекрасно, спасибо.
  • +8
    Баг работает на всех версиях операционок Mac OS X, где изменение настроек системных часов не требует ввода пароля. Подобная проблема существует и в ОС Linux. Радует то, что такой метод получения прав доступа к файлам имеет достаточно серьезные ограничения. Злоумышленник должен иметь физический или удаленный доступ к системе с правами администратора, а также хотя бы раз запустить команду sudo ранее. © iguides.ru
    • –6
      В 10.9 уверен не работает.
      • +9
        Как можно быть уверенным, если не проверили?
        • –14
          Не знаю, такое ощущение что они давно знают о багах, но фиксы делают только в 10.9
          • +7
            Ерунду говорите.
            • +27
              Эксполит работает до версии 1.7.10p6, в 10.9 по умолчанию идёт 1.7.10p7, где уже стоит фикс.
              Насчёт данного эксплоита аналогично.

              Можете поставить на виртуалку самую первую версию беты 10.9, и там уже есть фиксы. При этом для 10.8 из обновлений максимум новые версии драйверов.

              Спасибо за снижение кармы в ноль.
              • +2
                подтверждаю, в 10.9 не работает :(
              • +5
                Ну вот так бы сразу. =)
    • 0
      (del, про CAP_SYS_TIME не актуально)
  • +4
    А можно подробностей то=), причем тут часы?
    • –12
      Если установить часы компьютера на 1 января 1970 года, то Unix в этом случае сбрасывает счетчик и отсчет времени начинается с нуля. См. UNIX-время
      Именно благодаря этой особенности, защиту прав доступа к файлам можно обойти.
    • +23
      sudo позволяет опускать ввод пароля, если он был недавно введен

      вероятно, если sudo никогда не использовался (или есть другие причины?), то время его последнего использования — 0 по unix time. если установить часы в это время (как раз 1 января 1970), то sudo опустит ввод пароля и сразу даст права.

      в линуксах такой проблемы нету, т.к. в них нельзя изменить дату без административных прав
      • +1
        А если поменять дату в CMOS? Надо попробовать.
        • +1
          Во всяких дебианах есть сервис, который не позволяет sudo запоминать пароли между ребутами. Как в остальных — не знаю, правда :)
      • 0
        Тоесть это надо запустить sudo в туже секунду что и изменение времени в ноль?
        • +1
          Необязательно в ту же секунду. Таймаут обычно стоит в 10-15 минут.
          • 0
            Ага, я и забыл совсем, про таймаут.
      • 0
        На Metasploit советуют выполнить «sudo -k» — это «убивает сессию» sudo. Видимо, это реализуется именно путём замены времени последнего использования на 0.
  • +4
    Если прислать нулевое время по NTP, то можно взломать и Linux?
    • 0
      Уже «взламывали», вроде, сбросом времени в биосе. Не могу найти ссылок
      • 0
        С БИОСОМ все же ограничений довольного много. На него еще и пароль можно сделать. Если же есть физ. доступ к машине (как это нужно в случае с БИОС), то подключить в ее свою сетку, где будет «правильный» NTP сервер — вообще элементарно.
        • +2
          по идеи ntpd не должен дать изменить время на такую дельту, разве нет?
          • 0
            Если на сырой машине у которой села батарейка в биосе стоит 0, то ntpd должен дать изменить время на 2013 год, такая же дельта.
            • +2
              Но с обратным знаком.
            • +1
              ntpd не поменяет при этом время (см. мой коммент ниже), а вот ntpdate — за милую душу. вопрос в том, что именно используется в конкретной ОС
          • 0
            Возможно. Однако, я пролистал ман и википедию перед тем, как писать первое сообщение, и ничего по этому поводу не нашел.
            • +2
              из мана по ntpd:
              -g
              Normally, ntpd exits with a message to the system log if the offset exceeds the panic threshold, which is 1000 s by default. This option allows the time to be set to any value without restriction; however, this can happen only once. If the threshold is exceeded after that, ntpd will exit with a message to the system log. This option can be used with the -q and -x options. See the tinker command for other options.
      • +3
        Если есть доступ к биосу и время на ребуты, проще подключить флешку и слить инфу.
        Или же запустить в single user mode
  • 0
    А как фиксить такую уязвимость? Я даже не придумаю. Только просить рута для смены времени, но это ухудшение юзабилити.
    • +5
      Не давать ставить системное время меньше чего-то (даты выпуска ноута, 2000 года, да всё равно).
      • +6
        Аха, а потом как путешествия во времени изобретут все будут плеваться и придумывать костыли, как бы обходить это ограничение. Нет уж, не надо!
        • 0
          Перенесся в 01.01.1970 и поделил на 0
    • +3
      Заставить sudo спрашивать пароль при каждом запуске?
      для этого добавить в sudoers:
      Defaults:ALL timestamp_timeout=0

      upd. Или timestamp_timeout не влияет на уязвимость?
      • 0
        Это уменьшает юзабилити. Причём сильно. Посмотрите на Windows начиная с Vista, какую реакцию вызвала у пользователей необходимость ввода пароля на каждый чих. Причём если начал делать административные задачи, то обычно выполняешь их несколько за раз.
        • 0
          Не хотят — пускай отключают. Их безопасность — их проблемы.
        • 0
          «sudo -i» можно использовать, если несколько административных задач надо выполнить.
    • +4
      Как насчет просто добавить в sudo дополнительную проверку? Аля if (systemtime() < 10000) forceAskPassword();
    • +5
      но это ухудшение юзабилити

      Как часто вы меняете системное время? Настолько часто, что лень вводить пароль? :)
    • +6
      Элементарно — просто избавиться от костылей. Нужно различать состояния «пароль никогда не был введен» и «пароль был введен 1 января 1970 года».
    • –2
      Раз sudo запоминает когда был введен пароль крайний раз, то сделать проверку не в будущем ли это.
    • 0
      Странно как-то, что она вообще есть. По логике вещей, если был ребут, то пароль нужно спрашивать всегда, даже если таймаут еще не прошел. Как писали выше, так делается в дебиане и производных. Чтобы проверить, не прошел ли таймаут безпарольного доступа, можно опираться не на системное время от начала unix эпохи, а, например, на аптайм. Т.е. хранить где-нибудь запись о том, что пароль вводился на n-ной секунде аптайма, и спрашивать пароль, если время прошло.
    • 0
      Есть предназначенные именно для таких случаев clock_gettime(CLOCK_MONOTONIC_RAW) (>=linux-2.6.28, ниже CLOCK_MONOTONIC) и mach_absolute_time() (Mac OS X). В отличие от обычных, эти часы никогда не убывают и не имеют никакого отношения к мировому или местному времени: man clock_gettime:

      CLOCK_MONOTONIC
      Часы, которые не могут быть настроены и показывают монотонный ход времени отсчитываемой с некой неопределённой начальной точки. Эти часы не подвержены скачкам системного времени (например, системный
      администратор вручную изменил время), но на них влияет постепенная подгонка, выполняемая adjtime(3) и NTP.

      CLOCK_MONOTONIC_RAW (начиная с Linux 2.6.28; есть только в Linux)
      Похожи на CLOCK_MONOTONIC, но предоставляют прямой доступ к аппаратным часам, которые не подводятся NTP или постепенной подгонкой, выполняемой adjtime(3).
  • +1
    Опять «полгода назад»?
  • +2
    10.8.4 — требует пароль для смены времени…
    • +1
      это если у Вас замочек стоит внизу, тогда спрашивает. А если разлочить замок — спрашивать больше не будет.
      • 0
        спасибо — поставил замочек )

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.