web-dev-qa-db-ja.com

名前にpskを使用しているLinux抽象ソケットを別のユーザーが見つけられますか?

抽象UNIXソケットの名前が「\ 0some random secret」の場合、ブルートフォースを使用する以外に、抽象ソケットの名前空間から推測または取得できますか?

ファイルシステムのアクセス制御の対象となる通常のUNIXソケットと比較して、セキュリティ関連の欠点はありますか?

2
till

それは安全ではありません。 ss -xaを使用してソケットを列挙できます。自分のものではないプロセスのソケットも列挙できます。テストするには、これを実行します。

#include <stddef.h>
#include <sys/socket.h>
#include <sys/un.h>

int main(void) {
    struct sockaddr_un addr = {
      .Sun_family = AF_UNIX,
      .Sun_path = "\0some random secret"
    };
    int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
    bind(sockfd, &addr, offsetof(struct sockaddr_un, Sun_path) + 19);
    listen(sockfd, 50);
    accept(sockfd, NULL, NULL);
    return 0;
}

次に、別のユーザーとしてss -xaを実行すると、出力にu_str LISTEN 0 50 @some random secret 12979431 * 0のようなエントリが表示されます。